1

所以简而言之,我使用 tcplistener / tcpclient 设置了服务器,它有几十台客户端机器。一切都运行良好,除了我还没有设置系统来检测客户端是否断开连接。我想使用心跳(定期发送的数据包)来显示客​​户端仍然存在。不幸的是,服务器有一个等待接收块被调用,以便它可以从客户端获取实际数据,但它正在接收心跳。有什么方法可以在专门寻找心跳的同一端口上设置另一个接收?-谢谢。

4

1 回答 1

1

一种常见的方法是将数据包定义为具有特定类型,因此服务器数据包接收代码可以检查类型并适当地处理它。IE

if ( packet.type == PacketTypes.HeartBeat )
    //keep alive the client
else
    //it's data (or another packet)

当您添加代码时,我可以举一个更好的例子。

更新:

根据我们在评论中的讨论,您可以简单地创建一个单独的线程来处理您的心跳数据包。在这个线程中,您的套接字接收代码将通过首先检查类型来忽略除心跳数据包之外的任何内容。

您还可以在同一端口上创建另一个容纳套接字接收的线程来处理您的数据。在这种情况下,它会忽略收到的任何心跳包。

于 2012-07-20T21:50:32.193 回答