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

套接字编程VB.NET-无限期读取块,vb.net,sockets,Vb.net,Sockets,下面是我用来通过.NET套接字读取数据的代码。这段代码由一个单独的线程运行。它第一次工作正常,在第二次迭代中它停止在“client.Receive(buffer)”处,并且永远不会从中恢复。最初我使用递归读取数据,但将其改为迭代,认为递归可能是问题的根源。但显然不是 Private Sub ReceiveSocket(ByVal client As Socket) Dim bytesRead As Integer = 0 Do bytesRead = clie

下面是我用来通过.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()方法不会返回。在您的情况下,它可能不会这样做,直到您要求它先发送其他内容。只有在没有得到完整的服务器响应时,才应该再次调用Receive()


检查协议规范。服务器通常会发送一些信息,让您知道已收到完整响应。比如消息中的字节数。或消息末尾的特殊字符。Linefeed(vbLf)很流行。

@IrfanIdrees:什么在向您的程序发送数据?我连接到一个特定端口上的服务器应用程序,该服务器应用程序与信用卡/借记卡读卡器通信,然后将消息发送回我。