2010-02-17 41 views
1

以下是我用于通过.NET套接字读取数据的代码。这段代码由一个单独的线程运行。它在第一次运行正常,在第二次迭代时停止在“client.Receive(buffer)”并且从不恢复。最初我使用递归读取数据,但将其改为迭代,认为递归可能是问题的根源。但显然不是。Socket编程VB.NET - 无限地读取块

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

@IrfanIdrees:什么是发送数据到你的程序? – 2010-02-17 10:56:06

+0

我连接到特定端口上的服务器应用程序,该服务器应用程序与信用卡/借记卡读卡器进行通信,然后将我寄回给messaegs。 – Xience 2010-02-17 11:04:18

回答

2

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

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