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

Posted

技术标签:

【中文标题】服务器套接字如何使用c ++知道在Windows中拔出的网络电缆【英文标题】:how server socket know network cable in unplugged in windows using c++ 【发布时间】:2011-12-14 07:09:57 【问题描述】:

我正在使用 c++ 和 winsock lib 在 Windows 中开发客户端服务器应用程序,它工作正常,但如果它在网络上并且一旦服务器侦听开始并且如果我移除网络电缆,那么服务器在任何线程中都不会显示任何错误所以服务器在哪里插座知道网络电缆已拔下。 如果有人知道,请帮助我。

【问题讨论】:

【参考方案1】:

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

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

编辑

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

它可以像发送字符串“你在吗?”一样简单。并期待包含“是的,我是”的回复。如果您每分钟发送一次,并且在一分钟内(例如)没有得到回复,您可以认为连接已死。接收“你在吗?”的另一端知道它将每分钟收到一次消息。如果两分钟仍未到达,则无法再访问发件人。

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

另外,请记住,了解连接是否有问题的最佳且在某些情况下唯一的方法是尝试从套接字读取。

【讨论】:

感谢您的回复,但我无法正确理解您在说什么,请您详细解释我如何发送此“保持活动”消息以及谁将回复此消息?跨度> @yogeshpatel 增加了一些关于keep-alive消息的解释。【参考方案2】:

您可以拔下网络,然后重新插入,否则您的 Wi-Fi 笔记本电脑可能会暂时无法接收信号,然后再将其恢复。如果我们使用的所有程序都将此类可恢复的案例视为错误,那将是令人沮丧的。

来自Winsock "newbie" FAQ:

上一个问题涉及检测协议连接何时正常断开,但如果您想检测其他问题,例如网线未插入或工作站崩溃,该怎么办?在这些情况下,故障会阻止通知远程对等方出现问题。我的感觉是,这通常是一个功能,因为损坏的组件可能会在任何人注意到之前得到修复,所以为什么要求重新建立连接?

如果您觉得自己有“特殊需求”情况,您可以积极处理超时。但除非有非常好的理由,否则我不会这样做。

【讨论】:

以上是关于服务器套接字如何使用c ++知道在Windows中拔出的网络电缆的主要内容,如果未能解决你的问题,请参考以下文章

如何在Visual Studio 2015中使用fork()? (Windows 7专业版)

如何在 Windows 操作系统中使用 GtkSocket?

如何从 C++/Qt 中的 .exe 和 .dlls 中读取图标(在 Windows 上)?

如何在Linux上使用Windows标头构建Visual C ++应用程序?

如何在 C++/QT 中使用 TCP 服务器套接字创建 Http 服务器

Linux原生C库。如何配置Visual Studio代码在Windows上使用它们?