有乙個解決方案,其中包括乙個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上搜尋程序間通...