我在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
如果我真的联系与否,它就会保持这种状态。连接后我可以发送数据。我还将最后两个语句放在命令按钮中并验证返回状态即使在几秒钟或几分钟后也不会改变。
任何帮助我指向正确方向的人都会非常感激。
首先,没有必要检查套接字是否有效,这是你感兴趣的状态。
如果如你所示,waitForConnected
返回false,那么你可以确定state
也是未连接的 - 没有必要进一步检查它。
当连接成功时,waitForConnected
应返回true,state
应返回连接状态。可能是因为state
只会在你剩下的事件耗尽后才会变为真,虽然它会是Qt 4.8.2的怪癖(你不能尝试4.8.5或5.3.1吗?)。
我不知何故怀疑你所描述的确实发生了什么,但如果确实如此,你需要先说服我们。编写一个自包含的测试用例(单个main.cpp
文件),将其编辑到您的问题中,验证它是否仍然发生在Qt 4.8.5上,然后提交错误报告。