套接字编程VB.NET - 无限期读取块

时间:2010-02-17 10:42:57

标签: vb.net sockets

以下是我用于通过.NET套接字读取数据的代码。这段代码由一个单独的线程运行。它第一次运行正常,在第二次迭代时它停在“client.Receive(buffer)”并且永远不会从它恢复。最初我使用递归来读取数据,但是将其更改为迭代,认为递归可能是问题的根源。但显然事实并非如此。

Private Sub ReceiveSocket(ByVal client As Socket)

    Dim bytesRead As Integer = 0

    Do
        bytesRead = client.Receive(buffer)

        sb.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead))

        Array.Clear(buffer, 0, buffer.Length)
    Loop While bytesRead > 0

End Sub 'ReceiveCallback

为什么它会挂在Receive

1 个答案:

答案 0 :(得分:2)

嗯,这很正常。在服务器发送其他内容之前,Receive()方法不会返回。在您要求它先发送其他内容之前,它可能不适用于您的情况。如果没有得到完整的服务器响应,则只应再次调用Receive()。

检查协议规范。服务器通常会发送一些信息,告诉您已收到完整的响应。就像消息中的字节数一样。或者是邮件末尾的特殊字符。换行(vbLf)很受欢迎。