我有一个使用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