2010-02-17 50 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)很受歡迎。