qtdbus程式設計詳解(二)
qtdbus通訊,就必須有服務端和客戶端(關鍵是弄清楚哪一端是server,哪一端是client)。
我們先來看看,qtdbus通訊,server和client需要做些什麼工作。
server:
1.申請乙個匯流排連線,連線到system dbus或者是session dbus。
2.在匯流排上掛在服務,使得其他程序可以請求和查詢服務。
qtdbus程式設計詳解(一)中已經提到,service服務,相當於hostname,當我傳送訊息的時候,我們需要確定傳送到哪乙個host。只有跟匯流排註冊了service之後,外部程序才可以查詢和傳送訊息。
3.在掛載的服務上註冊乙個執行服務的物件。
對於qt來說,是物件導向的。那麼,qtdbus或者是程序通訊,實際上背後還是兩個物件在通訊。那麼同樣,我們需要為該host提供乙個可執行服務的物件(即可以傳送接收訊息以及做其他的相關處理的物件)。
上面的3已經說得很清楚了。通訊不管有沒有dbus,通訊的背後始終是兩個物件在對話。普通的qt的物件是無法實現與dbus的通訊的。出於方便和安全考慮,qtdbus有乙個dbsu介面卡adaptor的概念,該dbus adaptor的目的是實現訊息的**。介面卡,是可以載入也可以解除安裝的,而且是附著在qt普通物件上的,當普通的qt物件想要和dbus匯流排通訊的時候,只需要告訴這個附著在它身上的dbus adaptor,讓這個介面卡去**或者代替他接收訊息。這就是qdbusabstractadaptor類的工作,這個類就是用來建立dbus 介面卡的。只有server才需要介面卡,client不需要介面卡,需要但是需要另一種介面,在本章節後面將做詳細講解。
現在就編寫**來說明以上幾個步驟:
以上**就完成了以上的所有步驟,讓我們來看看上述**究竟做了些什麼。
car就是需要和dbus通訊的server qt的普通物件(不具有dbus功能)。
註冊service成功之後,你就可以使用d-feet這個工具觀察到你已經連線到session上了,並有乙個com.trolltech.carexample服務了
qt自帶的工具qdbusviewer也可以觀察到,但是我個人不太喜歡使用qdbusviewer,d-feet比它更加強大。
到此為止,server建立相關工作已經完成。下面來看看client建立以及相關工作。
client:
1.申請乙個匯流排連線,連線到system dbus或者是session dbus上。
2.建立乙個介面,連線到要請求的服務上。(這個service,在上面部分和qtdbus程式設計詳解(一)都有詳細的闡述)。
上面已經提到了。server需要乙個介面卡,而client則需要乙個介面。
3.傳送請求。
在client中,介面是派生與qdbusabstractinte***ce的乙個類。這個類使得client具有和遠端的server具有通訊能力。
client和server之間進行dbus通訊,很大程度上是client去呼叫server提供的一些method和signals(method和signals已經在qtdbus程式設計詳解(一)講述了)。那麼這個介面其實就是乙個proxy**。讓你操作remote的server上的method和signals就像操作本地函式一樣。這也就是qdbusabstractinte***ce派生類的主要作用。
同樣,下面我將結合**來具體的講述:
QtDBus程式設計詳解 一
qtdbus程式設計詳解 一 dbus的出現,使得linux程序間通訊更加便捷,不僅可以和使用者空間應用程式進行通訊,而且還可以和核心的程式進行通訊,可以說dbus使得linux變得更加智慧型,更加具有互動性。我們可以把dbus看做是乙個訊息匯流排 bus 首先介紹dbus的幾個重要的基本概念。具體...
plsql程式設計詳解 二
九 迴圈語句 一共有三種迴圈方式 oracle中沒有自增 自身 自身 1即可 while 條件 loop end loop loop exit when 條件 end loop for i in 1.5 必須為連續區間 loop end loop 例1 while迴圈列印數字的1 10set ser...
Execl程式設計詳解
一 使用動態建立的方法 首先建立 excel 物件,使用comobj 1 顯示當前視窗 2 更改 excel 標題欄 3 新增新工作簿 4 開啟已存在的工作簿 5 設定第2個工作表為活動工作表 或 6 給單元格賦值 7 設定指定列的寬度 單位 字元個數 以第一列為例 8 設定指定行的高度 單位 磅 ...