服务器套接字如何使用c ++知道在windows中拔出网络电缆

yog*_*tel 1 c++ sockets windows

我在Windows中使用c ++和winsock lib开发客户端服务器应用程序它工作正常,但如果它在网络上,一旦服务器监听启动,如果我删除网络电缆,那么服务器不会在任何线程中显示任何错误,所以服务器套接字知道网络拔掉电缆.如果有人知道请帮助我.

Som*_*ude 5

虽然应该可以检测到主机上已拔下网络电缆,但如果网络在服务器和客户端之间的其他位置中断,您仍会遇到同样的问题.

解决此问题的一种常见(如果不是最常见的)方法是发送"保持活动"消息.如果在某些超时内没有收到对该消息的回复,您只需关闭连接并释放与其关联的所有资源.

编辑

"保持活动"消息就像使用"ping"命令来查看是否可以访问远程计算机.它只是由服务器或客户端(无论是谁发起它)发送的消息,以查看连接的另一端是否处于活动状态并且可以到达.

它可以像发送字符串"你在吗?"一样简单.并期待一个包含"是的我"的回复.如果你每分钟发送一次,并且没有得到(例如)一分钟的回复,你可以认为连接已经死亡.另一端收到"你在吗?",知道它会每分钟收到一次消息.如果它没有到达两分钟,那么发送者将无法再访问.

如果无法修改协议以添加此类消息,请查看是否可以使用其他消息.

此外,请记住,最好的和某些情况下只知道连接是否有问题的方法是尝试从套接字读取.