gpt4 book ai didi

c++ - 无法为 Qt 的 waitForConnected 设置超时

转载 作者:行者123 更新时间:2023-11-30 01:50:42 45 4
gpt4 key购买 nike

我试图在我的 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/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com