我正在编写一个服务器应用程序来接收请求并使用vb.net套接字类回答 . 我使用的是socket.receive,第一次没问题,但第二次总是返回0字节 . 我可以通过嗅探器看到端口中有数据 . 我可以看到,我们通过了通信的3个第一步,我可以看到端口中的数据,但我的socket.receive指令总是返回0个字节(有时它会在第一次和第二次停止时工作,但有时候自从第一次返回0)我已经按照了很多推荐但没有任何作用,例如:在socket.receive指令之前使用socket.available,将socket.receive置于一个循环中等待完整的消息,清除套接字缓冲区这是我的socket.receive指令代码的一部分:
Try
While True
If vConnectionSocket.Available > 0 Then
vNumOfBytesReceived = vConnectionSocket.Receive(Data, 0, vMessageLength, SocketFlags.None)
Array.Copy(Data, indbuf, vClientMessage, indbuf, vNumOfBytesReceived)
If vStrMsg.IndexOf(ChrW(3)) > -1 Then
Exit While
End If
Array.Clear(Data, 0, Data.Length)
End If
End While
Catch ex As SocketException
If vConnectionSocket.Connected Then vConnectionSocket.Close()
MessageBox.Show("Receiving error >" + ex.ErrorCode.ToString + ":" + ex.Message.ToString)
Exit Sub
End Try
我感谢任何帮助 .
1 回答
Read the documentation:
换句话说,当Receive()返回0时,连接被另一方关闭 . 没有更多数据可供阅读 . 关闭连接的末尾 .