c IPC實現本機程序之間的通訊

2021-09-07 14:40:38 字數 2797 閱讀 2783

ipc可以實現本地程序之間通訊。這種用法不是太常見,常見的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案來替代程序之間的通訊。雖然不常見但也避免不了一些場景會使用該方案。

1)使用ipc技術實現多client與乙個sever通訊(不過是本機,感覺意義不大,但如果想實現本機上執行確實是乙個不錯的方案);

2)使用ipc技術實現訂閱者和生產者分離時,乙個server接收並消費訊息,客戶端是生產訊息的。

1

1:新建乙個messageobject類庫23

**如下:45

using

system;

6using

system.collections.generic;78

namespace

messageobject

9 //

使用訊息佇列儲存訊息

1415

public

string sendmessage(string

message)

1621

qmessage.enqueue(message);

2223

return

message;24}

25}26}

272:新建乙個控制台程式,名稱:ipcserver,是ipc的服務端

28using

system;

29using

system.runtime.remoting.channels.ipc;

30using

system.runtime.remoting.channels;

31using

system.runtime.remoting;

32using

messageobject;

33using

system.threading;

34using

system.collections.generic;

3536

namespace

ipcserver

3750

private

static

void

startserver()

5157

private

static

void

recevicemessage()

5869

}70 thread.sleep(1000); //

每一秒獲取一次71}

72}7374}75

}763:新建乙個控制台程式,名稱:ipcclient,ipc客戶端

77**如下:

78using

system;

79using

messageobject;

80using

system.runtime.remoting.channels.ipc;

81using

system.runtime.remoting.channels;

8283

namespace

ipcclient

8492

private

static

void

send(remoteobject objremoteobject)

93103

catch

(system.runtime.remoting.remotingexception)

104107

}108

}109

private

static

remoteobject connectserver()

110116

}117 }

view code

1)使用之間必須定義好乙個程序之間通訊的物件(該物件繼承了marshalbyrefobject ,允許在支援遠端處理的應用程式中跨應用程式域邊界訪問物件);

1

public

class

myprocesssendobject : marshalbyrefobject2"

, taskinfo);

8this.taskinfo =taskinfo;9}

1011

public

string

gettask()12"

, taskinfo);

14return

taskinfo;15}

1617 }

2)服務端是發布了乙個ipc服務,供客戶端段來繫結使用;

1

//i pc(inter process communication)的功能可以實現同一臺機器上的不同程序間通訊。

2static

void main(string

args)

3

3)客戶端使用時需要繫結服務端發布的位址,之後獲取發布的物件(暫時可以這麼理解:資料的傳遞和同步是通過物件序列化、反序列化),在客戶端操作該

物件時實際上是操作了服務端的物件。

1

static

void main(string

args)

2

工程結構:

程序之間通訊

之所以開啟子程序 肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。然而程序記憶體是物理隔離的 1.將共享資料放在檔案中,就是慢 2.管道subprocess 中那個管道只能單向通訊,必須有父子關係 3.共享一塊記憶體區域 得作業系統幫你分配,速度快 from multiprocessi...

程序之間 執行緒之間的通訊方式

1 程序間的8中通訊方式 1 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 2 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方...

如何實現Linux程序之間的通訊

多程序在程式當中執行的順序.pid pcntl fork 父程序和子程序都會執行下面 if pid 1 else if pid else程序的訊號註冊 function sig handler signo pcntl singal sighup,sig handler 註冊訊號 獲取當前的程序id ...