0

我正在编写一个服务器应用程序来接收请求并使用 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

我很感激任何帮助。

4

1 回答 1

0

阅读文档

如果您使用的是面向连接的 Socket,则 Receive 方法将读取尽可能多的数据,最多可达 size 参数指定的字节数。如果远程主机使用 Shutdown 方法关闭了 Socket 连接,并且已经接收到所有可用数据,则 Receive 方法将立即完成并返回零字节

也就是说,当 Receive() 返回 0 时,连接被对方​​关闭。没有更多数据可供读取。关闭连接的一端。

于 2012-12-27T21:52:52.650 回答