使用System.Net.Socket,我们如何知道远程套接字何时关闭?

Dra*_*kar 2 .net c# sockets

好的,这就是事情的进展:

[Server] Start
[Server] Socket.AcceptConnection
[Client] Start
[Client] Socket.Connect 
[Server] Receive //blocking
[Client] Send
[Server] Print
[Server] Receive
[Client] Close socket
Run Code Online (Sandbox Code Playgroud)

有没有办法知道客户端什么时候关闭连接?我目前正在使用MSDN上描述的假数据包技巧,我在一个单独的线程上执行此操作

[Server] socket.Send(byte[], 0,0);
Run Code Online (Sandbox Code Playgroud)

我检查它是否抛出任何错误,但它没有,即使客户端关闭套接字.

PS我正在思考,如果我在服务器端(TCP)和客户端的TcpClient上有一个套接字,可能会有问题吗?

谢谢.

Jon*_*eet 5

根据Socket.Connected的文档:

Connected属性的值反映了最近操作时的连接状态.如果需要确定连接的当前状态,请进行非阻塞,零字节发送调用.如果调用成功返回或抛出WAEWOULDBLOCK错误代码(10035),则套接字仍然连接; 否则,套接字不再连接.

请注意,就我所见,您当前的通话是阻止通话 - 您需要根据该文档进行非阻塞通话.