【问题标题】:Poll a connected client from a server in C#从 C# 中的服务器轮询连接的客户端
【发布时间】:2014-09-12 14:42:06
【问题描述】:

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

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

我只是想知道什么是不断检查客户端是否仍连接到服务器以及何时断开连接的好方法?

我在想某种超时检查之类的。我只是想知道是否有任何通用或适当的方法可以实现这一目标。

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

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

【问题讨论】:

  • 你的意思是连接到特定端口的服务器还是连接到任何端口?你想实现类似netstat的东西吗?

标签: c# sockets networking tcp connect


【解决方案1】:

socket.Receive 只会返回 0。 来自MSDN

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

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

【讨论】:

    【解决方案2】:

    有两种类型的套接字:用于侦听和用于连接。如果客户端已连接,您必须有一个与该连接关联的 Socket 实例。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 2016-02-16
      • 2023-04-09
      • 2015-10-06
      • 2013-05-18
      • 2013-11-13
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多