我有一个 tcp 客户端/服务器,我想检测客户端的连接丢失;因为我的客户端有多个接口,并且一次我使用其中一个接口连接到服务器,所以我想知道如何检测客户端的连接丢失,以便我可以将我的 tcp 客户端与另一个接口连接到服务器,如果所有这些接口失败了,我将数据存储在文本文件中。我用谷歌搜索了它,我已经看到保持活力,但这不是我想要的。
如果我的项目在 linux 中并且代码在 c++ 中很重要。
我有一个 tcp 客户端/服务器,我想检测客户端的连接丢失;因为我的客户端有多个接口,并且一次我使用其中一个接口连接到服务器,所以我想知道如何检测客户端的连接丢失,以便我可以将我的 tcp 客户端与另一个接口连接到服务器,如果所有这些接口失败了,我将数据存储在文本文件中。我用谷歌搜索了它,我已经看到保持活力,但这不是我想要的。
如果我的项目在 linux 中并且代码在 c++ 中很重要。
TCP 连接被设计为纠错而不是时间关键。此错误更正包括网络超时。
在套接字真正关闭之前,读写不会失败,这可能不会持续很长时间。
客户端确定连接是否超时的唯一方法是让客户端检测到它在指定时间内没有收到任何消息,然后手动关闭套接字。
这就是 Keep Alive 消息的用途。
我发现最好的方法是检查缓冲区,如果缓冲区为空,则表示您的 TCP 客户端成功将数据包发送到 TCP 服务器,您可以发送下一个数据包;用于检查您可以使用的缓冲区SIOCOUTQ
;它非常易于使用,并向您显示缓冲区中有多少数据。
尝试从套接字读取。当套接字关闭时,读取将失败,为您提供简单的检测。您可以在专用检测线程中执行此操作,这样您的主线程就不会阻塞。