简而言之,我使用 tcplistener/tcpclient 设置了服务器,它有几十台客户端机器。一切都运行良好,除了我还没有设置系统来检测客户端是否断开连接。我想使用心跳(定期发送的数据包)来显示客户端仍然存在。不幸的是,正在发生的事情是服务器有一个等待接收 block 调用,以便它可以从客户端获取实际数据,但它正在接收心跳。有什么方法可以在专门寻找心跳的同一端口上设置另一个接收? -谢谢。
最佳答案
一种常见的方法是定义您的数据包具有特定类型,因此服务器数据包接收代码可以只检查类型并适本地处理它。 即
if ( packet.type == PacketTypes.HeartBeat )
//keep alive the client
else
//it's data (or another packet)
当您添加代码时,我可以给出一个更好的示例。
更新:
根据我们在评论中的讨论,您可以简单地创建一个单独的线程来处理您的心跳数据包。在此线程中,您的套接字接收代码将通过首先检查类型来忽略除心跳包之外的任何内容。
您还可以创建另一个线程,在同一端口上容纳一个套接字接收来处理您的数据。在这种情况下,它只会忽略收到的任何心跳数据包。
关于c# - 从实际数据返回中对客户端心跳进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587152/