C IPC通道程序間通訊

2021-10-06 12:38:23 字數 2988 閱讀 4963

有乙個解決方案,其中包括乙個windows服務和乙個windows應用程式,兩者之間需要進行通訊。查了下,可以使用多種方法,如web service(適用於不同系統及跨平台情況)、.net remoting、訊息佇列、wcf(整合了前述方法的功能,但太新,不支援windows2000及以前的系統),其中remoting可以支援tcp、http、ipc通道的通訊,而ipc通道速度快,且僅能供處於同乙個系統中的程序間進行通訊,而這正好符合本專案的要求,故決定採用.net remoting的ipc方法:

開發平台為visual studio 2005,.net framework版本為2.0

1、 建立空白解決方案

3、 新增乙個class library:remoteobject

4、 三個專案的源**server.cs、client.cs、remoteobject.cs分別附後

5、 在server和client專案的引用中新增兩個程式集:

system.runtime.remoting程式集(.net元件)和remoteobject程式集(工程元件)

6、 生成兩個工程之後,雙擊開啟server程式,再開啟client,可以看到兩者通訊。

7、 程式邏輯很簡單:

client根據約定好的物件位址(uri)「ipc://serverchannel/remoteobject」去伺服器上訪問remoteobject物件。server在收到訪問物件的訊息之後,例項化乙個remoteobject物件。當client得到生成的remoteobject物件控制代碼後,呼叫其greeting方法,這個呼叫被傳遞到server端執行(因為remoteobject物件實際上是在server上),然後返回greeting方法的結果給client。

8、 簡言之,即完成了client程序訪問server程序的乙個物件,並呼叫此物件的方法的任務。

9、 源**:

remoteobject.cs

using system;

public class remoteobject : marshalbyrefobject

public remoteobject()

console.writeline("constructor called");

public string greeting(string name)

console.writeline("greeting called");

return "hello," + name;

server.cs

using system;

using system.runtime.remoting;

using system.runtime.remoting.channels;

using system.runtime.remoting.channels.ipc;

public class server

public static void main(string args)

//instantiate our server channel.

ipcserverchannel channel = new ipcserverchannel("serverchannel");

//register the server channel.

channelservices.registerchannel(channel, false);

//register this service type.

remotingconfiguration.registerwellknownservicetype(typeof(remoteobject), "remoteobject", wellknownobjectmode.singlecall);

console.writeline("press return to exit");

console.readline();

client.cs

using system;

using system.runtime.remoting;

using system.runtime.remoting.channels;

using system.runtime.remoting.channels.ipc;

public class client

public static void main(string args)

//create an ipc client channel.

ipcclientchannel channel = new ipcclientchannel();

//register the channel with channelservices.

channelservices.registerchannel(channel, false);

remoteobject obj = (remoteobject)activator.getobject(typeof(remoteobject), "ipc://serverchannel/remoteobject");

if (obj == null)

console.writeline("could not locate server");

return;

for (int i = 1; i < 5; i++)

console.writeline(obj.greeting("mmpire"));

server輸出:

press return to exit

constructor called

greeting called

constructor called

greeting called

constructor called

greeting called

constructor called

greeting called

client輸出:

hello,mmpire

hello,mmpire

hello,mmpire

hello,mmpire

程序間的通訊 IPC通道

內部程序通訊,是指在同一臺計算機當中的不同程序之間進行通訊。對於兩個程序之間的通訊方式有很多種,比如檔案共享,socket通訊,管道等,這裡主要講的是通過ipc channel的方式 主要用到的命名空間有以下幾個 using system.runtime.remoting using system....

C IPC程序間的通訊《C 多執行緒程式設計實戰》

程序間通訊示例 程式一開始就有2個程序,它們在乙個普通視窗中完成繪製矩形的任務。2個程序相互通訊,乙個程序再畫矩形時,另乙個程序要等待 include include tcscmp tchar define synchronizing mutex name text test mutex typed...

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

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