在C#中从服务器轮询连接的客户端

时间:2014-07-21 22:54:33

标签: c# sockets networking tcp connect

我正在尝试从连接到我的服务器的客户端轮询连接。

当您使用poll时,您需要为其提供套接字连接,但在服务器端,套接字绑定到它自己的IP地址和特定端口。使另一个套接字连接在同一端口但使用客户端的IP地址将无法工作,因为您在同一个套接字上不能有多个连接。

我只是想知道,如果客户端仍然连接到服务器以及断开连接时有什么好方法可以不断检查?

我在想某种超时检查或其他什么。我只是想知道是否有任何通用或正确的方法来实现这一目标。

我尝试了Socket.Poll,但它似乎没有达到我想要的效果。

重述我的问题,如何使用C#中的TCP套接字检查服务器端是否连接了客户端?

2 个答案:

答案 0 :(得分:0)

socket.Receive将返回0。 来自MSDN

  

如果使用面向连接的套接字,则Receive方法将读取尽可能多的数据,最大可达缓冲区大小。如果远程主机使用Shutdown方法关闭Socket连接,并且已收到所有可用数据,则Receive方法将立即完成并返回零字节。

如果需要,Socket类中还有Connected属性。

答案 1 :(得分:0)

有两种套接字:用于监听和连接。如果客户端已连接,则必须具有与该连接关联的Socket实例。

使用此套接字定期发送数据并接收和确认。这是100%确保连接仍处于打开状态的唯一方法。

特别是Connected属性不能用于检测丢失的连接,因为如果拔下网络电缆,则不会以任何方式通知双方。该财产原则上不准确。