Qt:QTcpSocket 的默认连接超时
Posted
技术标签:
【中文标题】Qt:QTcpSocket 的默认连接超时【英文标题】:Qt: default connection timeout for QTcpSocket 【发布时间】:2014-08-16 21:08:18 【问题描述】:请告知如何在不使用阻塞 waitForConnected() 方法的情况下设置默认连接超时?我注意到套接字在大约 60 秒后发出错误信号(QAbstractSocket::SocketTimeoutError),我可以将其处理为超时,但是可以调整此超时吗?
【问题讨论】:
嗨,我认为没有其他解决方案。您可以调整 waitForConnected() 但如果您不希望此函数阻塞(可能是因为 GUI 或其他原因),您应该使用线程。 没错,因为 GUI 阻塞。我想为套接字建立持久连接,但我不知道如何用线程来做。如果我只是转到线程 waitForConnected() 调用,它会在控制台中显示一个输出“无法为不同线程中的父级创建子级”,但没有任何明确的对象创建,只需调用 waitForConnected。 【参考方案1】:你可以使用QTimer
:
connectToHost
后启动。
您可能希望在套接字状态从 QAbstractSocket::HostLookupState
to QAbstractSocket::ConnectingState
更改时重置计时器,如果您希望更细粒度地控制超时的确切时间,则可能需要不同的超时时间。
如果您获得连接,请停止计时器,或将其重置以用于类似的发送/接收超时用途。
如果您遇到计时器超时,请执行 disconnectFromHost()
并可能在您收到断开连接信号时执行类似重试之类的操作。
在开发时,请确保至少将stateChanged(...)
和error(...)
信号连接到调试槽,它只打印参数。这样一来,当事情以您未预料到的方式发生时,您就会看到。
【讨论】:
是的,现在我用 QObject 的 startTimer() 来实现它。所以我现在可以接受这个答案。以上是关于Qt:QTcpSocket 的默认连接超时的主要内容,如果未能解决你的问题,请参考以下文章