如何检查连接到C TCP服务器套接字的PythonTCP客户端套接字的状态?

2024-05-29 06:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用C语言运行tcp服务器,用python运行tcp客户机。两者都在不同的硬件上运行。让我们考虑硬件A作为服务器,硬件B作为客户端。如果我优雅地退出在硬件A中的执行,它将向客户机(硬件B)发送一个空数据包,这样客户机就知道连接断开了。但是我没有直接退出,而是直接关闭硬件A的电源。现在客户端(硬件B)不会收到连接断开的空包通知。如何处理这种情况?当硬件A断电时,客户端如何知道断开连接?在


Tags: 服务器客户端客户机硬件情况数据包tcp空包
1条回答
网友
1楼 · 发布于 2024-05-29 06:34:16

如果TCP连接是空闲的,客户机很长时间都不会知道(也许永远不会知道)。在

如果客户端试图向服务器发送任何数据,则当服务器关机时,客户端的TCP数据包将停止被服务器确认;客户端的TCP堆栈将尝试重新发送几次数据包,但在几分钟内它将放弃并单方面关闭TCP套接字。此时,套接字将select()ready for read,套接字上对read()的下一次调用将返回0,表示连接已关闭。在

因此,如果您想优雅地处理这个场景,那么要做的就是定期在套接字上发送一些虚拟数据(即服务器在接收到这些数据时会忽略这些数据)。这将足以确保客户端的本地TCP堆栈检测并处理该问题。在

相关问题 更多 >

    热门问题