小编Ole*_*ina的帖子

通过 TCP 连接 DBus 服务

我是进程间通信的新手。我需要你的帮助和明确的解释。我有 2 个应用程序。其中一个是服务,一个是客户端。我使用 QT/C++ 来编写它们。当他们在一台本地 PC 上工作时 - 一切都很好。但我需要将它们分开。

因此,我在 IP 为 192.30.82.101 的 PC 上有一项服务。我使用下一个代码将它连接到总线:

QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerObject("/my/service/MyService", mySvc);
connection.registerService("my.service.MyService");
Run Code Online (Sandbox Code Playgroud)

另外,我在另一台 IP 为 192.30.82.40 的 PC 上有一个客户端。我使用下一个代码连接我的客户端:

QDBusServiceWatcher serviceWatcher = new QDBusServiceWatcher(); 
serviceWatcher->setConnection(QDBusConnection::sessionBus());
serviceWatcher->addWatchedService("my.service.MyService");     
Run Code Online (Sandbox Code Playgroud)

.....

    myServiceProxy = new local::MyService("my.service.MyService", 
                   "/my/service/MyService", QDBusConnection::sessionBus(), this);
Run Code Online (Sandbox Code Playgroud)

我需要使用 IP 192.30.82.40 将 PC 上的客户端连接到 PC 192.30.82.101 上的服务。我不知道该怎么做。我在论坛上找到了一些主题,但我仍然不明白该怎么做。

所以,我发现了什么:

  1. 在我的服务所在的 PC 上,我必须向 /etc/dbus-1/session.conf 添加额外的行:

<listen>tcp:host=<host>,port=<port></listen>

<listen>unix:tmpdir=/tmp</listen>

<auth>ANONYMOUS</auth>

<allow_anonymous/>

在这里我有一个问题:我必须在这里使用哪个 IP 地址(服务器或客户端)?哪个端口用于 DBUS(它是默认端口还是我如何检查它)?我尝试设置客户端 PC、服务 PC 和不同端口以及端口 0 的 IP 地址,但出现错误:无法绑定套接字“172.30.82.40:0”:无法分配请求的地址。

  1. 在客户端,我必须用相同的地址集DBUS_SESSION_BUS_ADDRESS: export DBUS_SESSION_BUS_ADDRESS=tcp:host=<host>,port=<port>

我试图用不同的端口来做到这一点,用 …

c++ qt dbus

3
推荐指数
1
解决办法
2685
查看次数

标签 统计

c++ ×1

dbus ×1

qt ×1