检查客户端是否正在尝试连接

本文关键字:连接 客户端 是否 检查 | 更新日期: 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