【问题标题】:Qt: default connection timeout for QTcpSocketQt:QTcpSocket 的默认连接超时
【发布时间】:2014-08-16 21:08:18
【问题描述】:

请告知如何在不使用阻塞 waitForConnected() 方法的情况下设置默认连接超时?我注意到套接字在大约 60 秒后发出错误信号(QAbstractSocket::SocketTimeoutError),我可以将其处理为超时,但是可以调整此超时吗?

【问题讨论】:

  • 嗨,我认为没有其他解决方案。您可以调整 waitForConnected() 但如果您不希望此函数阻塞(可能是因为 GUI 或其他原因),您应该使用线程。
  • 没错,因为 GUI 阻塞。我想为套接字建立持久连接,但我不知道如何用线程来做。如果我只是转到线程 waitForConnected() 调用,它会在控制台中显示一个输出“无法为不同线程中的父级创建子级”,但没有任何明确的对象创建,只需调用 waitForConnected。

标签: qt qtnetwork qtcpsocket


【解决方案1】:

你可以使用QTimer:

  • 致电connectToHost后启动。
  • 您可能希望在套接字状态从 QAbstractSocket::HostLookupState to QAbstractSocket::ConnectingState 更改时重置计时器,如果您希望更细粒度地控制超时的确切时间,则可能需要不同的超时时间。
  • 如果您获得连接,请停止计时器,或将其重置以用于类似的发送/接收超时用途。
  • 如果您遇到计时器超时,请执行 disconnectFromHost() 并可能在您收到断开连接信号时执行类似重试之类的操作。

在开发时,请确保至少将stateChanged(...)error(...) 信号连接到调试槽,它只打印参数。这样一来,当事情以您未预料到的方式发生时,您就会看到。

【讨论】:

  • 是的,现在我用 QObject 的 startTimer() 来实现它。所以我现在可以接受这个答案。
猜你喜欢
  • 1970-01-01
  • 2018-05-24
  • 2013-01-21
  • 2021-07-11
  • 2012-01-12
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多