QTcpSocket重连方式

Posted

技术标签:

【中文标题】QTcpSocket重连方式【英文标题】:QTcpSocket reconnection way 【发布时间】:2012-07-18 12:13:12 【问题描述】:

我使用 QTcpSocket 从服务器获取信息。

就我而言,有必要连接并等待来自服务器的字节,然后获取它们。

我创建 QTcpSocket。将其连接到主机。开始获取数据,没关系。但是,例如,当我拔出以太网电缆时,与套接字对象没有区别。

我尝试连接诸如 QAbstractSocket::error() 和 QAbstractSocket::stateChange() 之类的信号,但在断开连接时没有任何信号给我。

我的任务是等待几秒钟并尝试重新连接,直到我再次获得连接。

有什么建议吗?

【问题讨论】:

TCP 连接不会因为电缆断开而丢失。断开电缆并在一分钟内重新连接(如果我没记错的话)应该只会显示为您的程序的延迟,而不是断开连接。 你的协议支持乒乓球吗? 【参考方案1】:

我在编写客户端和服务器项目时遇到了同样的问题。

我使用了 SIGNAL -> disconnected() ,它在客户端断开连接时立即发出。

connect(client, SIGNAL(disconnected()), this, SLOT(DisconnectMessage()));

请尝试使用它。

【讨论】:

在问题cmets中提到,socket没有报告连接,因为它还在重试发送/接收数据包。您需要等待一段时间,直到它放弃并报告断开连接。 我做了一些测试,所以我看到我的 QTcpSocket 在拔掉以太网后 1-2 分钟后断开连接,当我再次插入它时,一段时间后它会自动连接。它完全让我满意。

以上是关于QTcpSocket重连方式的主要内容,如果未能解决你的问题,请参考以下文章

同一对象中的 QTcpSocket 到 QTcpSocket

QTcpSocket 不加载 ssl

QTcpSocket使用过程中的一些问题记录

Qt的QTcpSocket ReadyRead信号的实现

如何在不同的线程中执行 QTcpSocket?

Qt QTcpSocket 异步写入