我试图在我的 Qt 应用程序中自定义连接超时,但无论我将什么数字作为参数传递给 waitForConnected,超时都是相同的(大约 3 秒,而不是默认的 30)。
例子:
if(socket->waitForConnected(koko))
{
...do stuff...
}
else
{
...do else stuff...
}
无论我将 koko 设置为多少,超时都保持在 3 秒左右。我做错了什么?
我的套接字连接:
socket = new QTcpSocket();
socket->connectToHost(addres,port);
哪里:
QHostAddress addres, quint16 port
而 koko 我就是这样从 QLineEdit 中获得的(超时是 QLineEdit):
int koko = ui->Timeout->text().toInt()*1000;
最佳答案
来自Qt documentation for QAbstractSocket :
Waits until the socket is connected, up to msecs milliseconds. If the connection has been established, this function returns true; otherwise it returns false.
您说该方法在大约 3 秒后返回 false。这可能是一种正常行为。看这段代码:
#include <QTcpSocket>
#include <QTime>
int main(int, char *) {
QStringList hosts;
hosts << "127.0.0.1" << "10.1.25.62" << "192.168.1.0";
for(QString host : hosts) {
QTime timer;
timer.start();
QTcpSocket socket;
socket.connectToHost(host, 80);
if(socket.waitForConnected(30000)) {
qDebug() << host << "-- Connected in" << timer.elapsed();
} else {
qDebug() << host << "-- NOT Connected in" << timer.elapsed();;
}
}
}
结果是:
"127.0.0.1" -- NOT Connected in 1
"10.1.25.62" -- NOT Connected in 5997
"192.168.1.0" -- NOT Connected in 30020
在所有情况下,waitForConnected() 方法都会返回 false。
- 首先,地址 (127.0.0.1) 可访问但端口已关闭:连接立即失败。
- 然后,该地址存在(在同一网络上),但需要更多时间才能检测到端口已关闭。它在 6 秒(大约)后失败
- 最后,192.168.1.0 无法访问,因此需要完全超时以确保连接失败。
请记住另一个重要信息(仍然来自 Qt 文档):
Note: This function may fail randomly on Windows. Consider using the event loop and the connected() signal if your software will run on Windows.
这也可能是您的问题。你在 Windows 上运行吗?
关于c++ - 无法为 Qt 的 waitForConnected 设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27114008/