程序間的通訊 IPC通道

2021-07-04 03:48:01 字數 1753 閱讀 9459

內部程序通訊,是指在同一臺計算機當中的不同程序之間進行通訊。

對於兩個程序之間的通訊方式有很多種,比如檔案共享,socket通訊,管道等,這裡主要講的是通過ipc channel的方式

主要用到的命名空間有以下幾個:

using system.runtime.remoting;

using system.runtime.remoting.channels;

using system.runtime.remoting.channels.ipc;

ipc管道通訊主要分為:客戶端,服務端,通訊物件三個方面。

對於服務端來說:

ipcserverchannel channel = new ipcserverchannel("myserverchannel");//新建乙個服務端通道

channelservices.registerchannel(channel, false); //將通道註冊

remotingconfiguration.registerwellknownservicetype(typeof(dataobj), "dataobj", wellknownobjectmode.singleton);//配置遠端連線方式

其中,在配置方法當中,registerwellknownservicetype呼叫非常重要,因為它告訴遠端庫它所能提供的物件和這些物件的uri。在上面**的呼叫中,我們提供了乙個dataobj物件。這個物件完整的uri近似於下面的位址,實際上這也是客戶端用來連線服務端的uri: 

ipc://myserverchannel/dataobj

第三個引數代表處理每乙個遠端請求的時候,服務端提供的是同乙個物件(wellknownobjectmode.singleton)還是針對每乙個請求新建乙個物件提供服務(wellknownobjectmode.singlecall)

對於客戶端來說:

ipcclientchannel clientchannel = new ipcclientchannel();

channelservices.registerchannel(clientchannel, false);

remotingconfiguration.registerwellknownclienttype(typeof(dataobj),"ipc://myserverchannel/dataobj");

大體的註冊流程是一樣的,然後在對dataobj進行呼叫之前,記得要先新建乙個物件 

dataobj obj =  new dataobj();

然後就可以直接呼叫服務端程序方面傳來的引數或者是方法了

對於要傳輸的通訊物件:

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace data

set}

}}

我們可以看到,它是繼承marshalbyrefobject類的,如果不繼承這個類的話,dataobj物件就不能跨域,只能簡單的在被呼叫的域內例項化了,也就是別的程序無法訪問。

c 程序間通訊方案之IPC通道

2010年12月05日 分類 開發筆記 標籤 c 程式設計 最近一直糾結與使用多程序還是多執行緒來構建程式。多執行緒的方法似乎不錯,但是乙個程序可承受的執行緒數有有限的,並且由於每個執行緒都與ui有著些許關係,執行緒的工作大多數時間浪費在阻塞上了,效率實在不是很高。筆者遂在google上搜尋程序間通...

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...