我在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
如果我真的没有联系,它会保持这种状态。连接后我可以发送数据。我还将最后两个语句放在命令按钮中,并验证返回状态即使在几秒钟或几分钟后也不会改变。
任何帮助我指向正确方向的人都会非常感激。
答案 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上,然后提交错误报告。