服务器重新启动后重新连接到 QDBus 服务器 (Qt C++)

Posted

技术标签:

【中文标题】服务器重新启动后重新连接到 QDBus 服务器 (Qt C++)【英文标题】:Re-connecting to QDBus server after server has been restarted (Qt C++) 【发布时间】:2016-07-23 19:34:30 【问题描述】:

我正在测试使用 DBus 进行 QT C++ 项目 (Linux) 的进程间通信。

我没有使用总线守护程序,而是使用 unix 路径/套接字。

在穿越神秘的 QT DBUS 世界之后,一切似乎都很顺利,直到我想测试我的一个接口的稳健性。

杀死服务器进程并重新启动它后,连接超时..我清理连接对象(客户端)并尝试重新连接到服务器。

客户端似乎无法重新连接,我收到以下错误: 错误名称:org.freedesktop.DBus.Error.NoServer errMessage: 无法连接到套接字 /tmp/abcd: 连接被拒绝

我试过了: - QDBusConnection::disconnectFromPeer(addr); - 清理所有相关对象,因此不存在对连接的引用。

当我重新启动客户端时,连接到(重新启动的)服务器没有问题。

【问题讨论】:

【参考方案1】:

发现问题! 似乎是 Qt 4.8.x 中的一个错误: https://bugreports.qt.io/browse/QTBUG-27973 https://codereview.qt-project.org/#/c/60709/

QDBusConnection::disconnectFromBus 和 QDBusConnection::disconnectFromPeer 不会删除无效连接

【讨论】:

以上是关于服务器重新启动后重新连接到 QDBus 服务器 (Qt C++)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - 重新启动后重新连接到数据库

Socket.io 客户端在突然断开连接后无法重新连接到服务器

自动重新连接到 TCP 主机

聊天应用程序:成功重新连接到 WebSocket 服务器后该怎么办?

重新连接到我的 socket.io 服务器后,没有收到从我的 android 设备发送的事件

在 redux-Saga 中重新连接到 webSocket 服务器的标准方法?