我有一個使用TCP發送文件的發送應用程序。有時這些文件包含一條消息,而其他時間該文件可能包含多條消息。不幸的是,我無法訪問發送應用程序的代碼。如何判斷另一條消息是否在TCP連接中
我正在編輯遺留代碼來接收這些消息。發送單個消息時,我設法讓舊應用程序接受文件。但是,由於我在收到單個消息後斷開套接字,發件人會發出斷開連接錯誤。
我寫了一個小程序來幫助確定是否有另一條消息。如果它的工作,我打算將它整合到代碼,但我有不同的結果:
Dim check(1) As Byte
If (handler.Receive(check, SocketFlags.Peek) > 0) Then
Dim bytesRec As Integer
ReDim bytes(1024)
bytesRec = handler.Receive(bytes)
End If
如果發送另一條消息,這將檢測到它。但是,如果文件只有一條消息,它會鎖定接收,直到我發送另一個文件,然後纔會被接受。
有沒有辦法判斷是否有另一個掛起的消息,如果該流爲空則不會鎖定?
我不會發布的所有代碼接受的消息,因爲它是一個傳統的老鼠窩,但低於總體思路是:
s2 = CType(ar.AsyncState, Socket)
handler = s2.EndAccept(ar)
bytes = New Byte(1024) {}
Dim bytesRec As Integer = handler.Receive(bytes)
' Send Ack/Nak.
numAckBytesSent = handler.Send(myByte)
預先感謝您的任何援助。
我做了一個快速測試,並且Socket.Select似乎正是我一直在尋找的東西。謝謝你,你真棒! – Tim