我是新進入進程間通信。我需要你的幫助和明確的解釋。我有2個應用程序。其中之一是一種服務,一種是客戶。我用QT/C++編寫它們。當他們在一臺本地PC上工作時 - 一切都很好。但我需要將它們分開。通過TCP連接到DBus服務
所以,我有一臺IP 192.30.82.101的PC上的服務。 我用下面的代碼將其連接到總線:
QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerObject("/my/service/MyService", mySvc);
connection.registerService("my.service.MyService");
另外我有一個客戶端IP 192.30.82.40在另一臺電腦上。 我連接使用下面的代碼我的客戶:
QDBusServiceWatcher serviceWatcher = new QDBusServiceWatcher();
serviceWatcher->setConnection(QDBusConnection::sessionBus());
serviceWatcher->addWatchedService("my.service.MyService");
.....
myServiceProxy = new local::MyService("my.service.MyService",
"/my/service/MyService", QDBusConnection::sessionBus(), this);
我需要我的客戶端IP 192.30.82.40連接在PC上的服務在PC上192.30 .82.101。我不知道該怎麼做。我在論壇上發現了幾個主題,但我仍然不明白該怎麼做。
所以,我發現:
- 在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」:無法分配請求的地址。
- 在客戶端,我必須將DBUS_SESSION_BUS_ADDRESS設置爲相同的地址:
export DBUS_SESSION_BUS_ADDRESS=tcp:host=<host>,port=<port>
。
我試着用不同的端口做這個,用0端口,因爲這意味着 - 使用任何空閒端口。但是我不能用任何端口+ IP配置啓動總線守護進程。
而且我已經嘗試使用下面的代碼客戶端QDBusServiceWatcher連接到總線:
serviceWatcher->setConnection(QDBusConnection::connectToBus("tcp:host=<host>,port=<port>", "session"));
這不是成功的。 我不知道如何將它們連接到對方。 請問任何人,請告訴我它應該如何,它是如何工作的? 我想清楚地瞭解它是如何工作的?
我將非常感謝任何幫助。我希望你的好意。
UPDATE I have found how to connect my client to DBus bus via TCP:
- 在PC哪裏是我的服務,我必須添加額外的行/etc/dbus-1/session.conf:
<listen>tcp:host=localhost,bind=*,port=6667,family=ipv4</listen>
<listen>unix:tmpdir=/tmp</listen>
<auth>ANONYMOUS</auth>
<allow_anonymous/>
這裏我們應該添加PORT。我們可以在dbus配置文件中找到它。
- 在客戶端我必須設置DBUS_SESSION_BUS_ADDRESS與對應的地址(PC的IP,其中是服務):
export DBUS_SESSION_BUS_ADDRESS=tcp:host=192.50.88.10,port=6667,family=ipv4
。
就是這樣。我們可以檢查它剛啓動dbus-monitor。
But now I have another issue: how to connect my client to my service? I need to do something more to connect to my service. I guess that this is something like:
QDBusConnection::connectToBus("tcp:host=<host>,port=<port>","connectionName");
我試圖用任何隨機名稱進行連接,但是這是不正確的。 所以,我的問題是 - 我可以得到正確的連接名稱?
HiЕлена)))[D-Bus聊天示例](http://doc.qt.io/qt-5/qtdbus-chat-example.html) –
或[QtDbus](https:// habrahabr。 ru/post/185212 /)project ping pong) –
對不起,我在這裏找不到有關TCP DBus通信的任何信息。這裏的客戶和服務都在同一臺個人電腦上工作,而且肯定會在一次公交會話中註冊。 –