以下是我用于通过.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
?
答案 0 :(得分:2)
嗯,这很正常。在服务器发送其他内容之前,Receive()方法不会返回。在您要求它先发送其他内容之前,它可能不适用于您的情况。如果没有得到完整的服务器响应,则只应再次调用Receive()。
检查协议规范。服务器通常会发送一些信息,告诉您已收到完整的响应。就像消息中的字节数一样。或者是邮件末尾的特殊字符。换行(vbLf)很受欢迎。