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