Vb.net 如何判断TCP连接中是否有另一条消息挂起
我有一个使用TCP发送文件的发送应用程序。有时这些文件包含一条消息,有时该文件可能包含多条消息。不幸的是,我无法访问发送应用程序的代码 我正在编辑旧代码以接收这些消息。我已经设法让遗留应用程序在发送一条消息时接受一个文件。但是,由于我在收到一条消息后断开了套接字的连接,因此发送方会给出一个断开连接错误 我编写了一个小流程来帮助确定是否还有其他消息。如果它能工作,我会将其合并到代码中,但结果好坏参半:Vb.net 如何判断TCP连接中是否有另一条消息挂起,vb.net,sockets,tcp,Vb.net,Sockets,Tcp,我有一个使用TCP发送文件的发送应用程序。有时这些文件包含一条消息,有时该文件可能包含多条消息。不幸的是,我无法访问发送应用程序的代码 我正在编辑旧代码以接收这些消息。我已经设法让遗留应用程序在发送一条消息时接受一个文件。但是,由于我在收到一条消息后断开了套接字的连接,因此发送方会给出一个断开连接错误 我编写了一个小流程来帮助确定是否还有其他消息。如果它能工作,我会将其合并到代码中,但结果好坏参半: Dim check(1) As Byte If (handler.Receive(check,
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)
提前感谢您提供的任何帮助。可以作为查询套接字可读性的快速方法。传入0秒的超时时间,并将有问题的套接字显示在可读性列表中,它将立即检查并报告
另外两个选项可能是在套接字上设置,或者使用使套接字非阻塞,以便您可以发现(作为
Receive
调用的一部分)是否有传入数据。不过,在.NET中执行这些操作似乎有点不方便,因为它们会抛出异常,而不是简单地返回一个值,这可能会使代码变长。请继续阅读。如果什么都没有了,您将得到某种类型的流结束指示,具体取决于您的API。我做了一个快速测试,Socket.Select似乎正是我要找的。谢谢你,你太棒了!