检查客户端是否正在尝试连接
本文关键字:连接 客户端 是否 检查 | 更新日期: 2023-09-27 17:53:14
为了检查消息是否待定,我可以使用Socket.Available
,但是我应该怎么做才能检查客户端是否试图在调用Socket.Accept
之前连接到我的服务器?
TCP不提供消息,因此在任何情况下都无法检查消息。您可以看到至少有多少字节可用,但它可能不是一条消息,也可能是多条消息。同样,当1ns后的数据到达时,Available
可能是0
。所以考试什么也买不到。
你不需要检查数据或连接。
运行accept循环:
while (true) {
RunConnectionAsync(socket.Accept());
}
读也是如此:当数据可能到来时,始终有一个未完成的读请求。Read
将等待,直到数据到达。
。或者不要。没有尝试。(在这种情况下:总是这样。)
一段时间后,我找到了一个解决方案。只需将Socket.Blocking
属性设置为false
。然后Socket.Accept
函数将检查是否有一个挂起的连接,如果有一个挂起的连接,它将接受这个连接,如果没有,则抛出一个SocketException
, SocketException.ErrorCode
等于"10035"。如果抛出这种类型的异常并伴有错误码"10035",我将检查是否要退出,如果是,我将退出,如果不是,我将召回Socket.Accept
函数并重复该过程。
注意:同样的方法可以用来调用其他阻塞方法,实际上阻塞线程的执行。
来源:
https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.blocking (v = vs.110) . aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668 (v = vs.85) . aspx