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

问题描述 投票:0回答:2

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

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

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

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

我已经尝试过

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

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

c# sockets networking tcp
2个回答
0
投票

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

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

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


0
投票

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

Socket
实例。

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

尤其是

Connected
属性不能用于检测丢失的连接,因为如果拔掉网络电缆,双方都不会以任何方式得到通知。从原则上讲,该属性不可能准确。

© www.soinside.com 2019 - 2024. All rights reserved.