Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何判断TCP连接中是否有另一条消息挂起_Vb.net_Sockets_Tcp - Fatal编程技术网

Vb.net 如何判断TCP连接中是否有另一条消息挂起

Vb.net 如何判断TCP连接中是否有另一条消息挂起,vb.net,sockets,tcp,Vb.net,Sockets,Tcp,我有一个使用TCP发送文件的发送应用程序。有时这些文件包含一条消息,有时该文件可能包含多条消息。不幸的是,我无法访问发送应用程序的代码 我正在编辑旧代码以接收这些消息。我已经设法让遗留应用程序在发送一条消息时接受一个文件。但是,由于我在收到一条消息后断开了套接字的连接,因此发送方会给出一个断开连接错误 我编写了一个小流程来帮助确定是否还有其他消息。如果它能工作,我会将其合并到代码中,但结果好坏参半: Dim check(1) As Byte If (handler.Receive(check,

我有一个使用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) 
提前感谢您提供的任何帮助。

可以作为查询套接字可读性的快速方法。传入0秒的超时时间,并将有问题的套接字显示在可读性列表中,它将立即检查并报告


另外两个选项可能是在套接字上设置,或者使用使套接字非阻塞,以便您可以发现(作为
Receive
调用的一部分)是否有传入数据。不过,在.NET中执行这些操作似乎有点不方便,因为它们会抛出异常,而不是简单地返回一个值,这可能会使代码变长。

请继续阅读。如果什么都没有了,您将得到某种类型的流结束指示,具体取决于您的API。

我做了一个快速测试,Socket.Select似乎正是我要找的。谢谢你,你太棒了!