QTcpSocket状态不正确

时间:2014-07-18 18:11:21

标签: qt sockets status qtcpsocket

我在Linux Debian上使用Qt 4.8.2(64位)。

我遇到套接字状态问题。我是客户端连接到服务器,我的相关代码片段是:

QTcpSocket *socket = new QTcpSocket(this);
socket->connectToHost(interface[cameras[listnum].interface].ip,interface[cameras[listnum].interface].port);
qDebug() << socket->waitForConnected(10000);
qDebug() << socket->isValid();
qDebug() << socket->state();

我正在连接到我本地的服务器,我可以断开以太网电缆,以测试连接和非连接状态。我可以告诉我是否在等待时间连接,如果有线连接到服务器,那么waitForConnected需要不到0.5秒,如果没有连接电缆,那么waitForConnected会在10秒时超时。

我的问题是我获得了相同的状态。 qDebug的输出是:

QAbstractSocket :: UnconnectedState

如果我真的没有联系,它会保持这种状态。连接后我可以发送数据。我还将最后两个语句放在命令按钮中,并验证返回状态即使在几秒钟或几分钟后也不会改变。

任何帮助我指向正确方向的人都会非常感激。

1 个答案:

答案 0 :(得分:0)

首先,没有必要检查套接字是否有效,这是你感兴趣的状态。

如果如您所示,waitForConnected返回false,那么您可以确定state也未连接 - 无需进一步检查它。

连接成功后,waitForConnected应返回true,state应返回连接状态。可能是state只有在你耗尽其余事件后才会变为真,虽然它会是Qt 4.8.2的怪癖(你不能尝试4.8.5或5.3.1吗?)。

我不知何故怀疑你所描述的确实发生了什么,但如果确实如此,你需要先说服我们。编写一个自包含的测试用例(单个main.cpp文件),将其编辑到您的问题中,验证它是否仍然发生在Qt 4.8.5上,然后提交错误报告。