C 命名管道通訊

2021-08-09 04:23:40 字數 1186 閱讀 1076

命名管道(namedpipe)是伺服器程序和乙個或多個客戶程序之間通訊的單向或雙向管道。不同於匿名管道的是:命名管道可以在不相關的程序之間和不同計算機之間使用,伺服器建立命名管道時給它指定乙個名字,任何程序都可以通過該名字開啟管道的另一端,根據給定的許可權和伺服器程序通訊。命名管道提供了相對簡單的程式設計介面,使通過網路傳輸資料並不比同一計算機上兩程序之間通訊更困難,不過如果要同時和多個程序通訊它就力不從心了。

最近做專案需要在c++和c#程式之間進行通訊,查了好多資料,本來覺得挺複雜,其實弄明白之後很簡單。c++與c#都是windows平台的,進行管道通訊其實都是呼叫系統api只不過都是封裝好了的,兩者之間寫的通訊都是相通的,只要建立的管道名相同即可。比如用c++建立出服務端c++sever和客戶端c++cliet,他們之間可以直接收發訊息,同時c#建立出服務端c#sever和客戶端c#cliet可以相互發訊息。都實現之後,用c++sever和c#client組合或者c++client和c#sever組合使用基本是沒有問題的,可能傳輸時有字元編碼問題,可以除錯解決。以下是我寫的c#服務端和客戶端的兩個控制台程式。

服務端:

class program

private

static

void

waitdata()

console.readkey();

}catch (ioexception e)}}

}

客戶端:

class program

public

static

void

startclient()

streamwriter sw = new streamwriter(pipestream);

streamreader sr = new streamreader(pipestream);

while (true)//迴圈輸入}}

catch (exception e)

}}

需要注意的問題:

1.管道通訊為半雙工通訊,資訊的進出都是從乙個管道進出,類似對講機,資訊要麼進要麼出,有時候寫不好就會造成阻塞,因此往流裡面寫完東西需要flush().

2.如果c++與c#通訊,c++沒有flush()函式,在傳遞的字串中加上\n即可.

3.傳輸過程注意編碼問題.

C 命名管道通訊

原文 c 命名管道通訊 最近專案中要用c 程序間通訊,以前常見的方法包括rmi 發訊息等。但在windows下面發訊息需要有視窗,我們的程式是乙個後台執行程式,發訊息不試用。rmi又用的太多了,準備用管道通訊來做訊息通訊。管道通訊以前在大學學過,包括匿名管道和命名管道。匿名管道只能用在父子程序之間 ...

C 程序通訊之命名管道

命名管道通過網路來完成程序間通訊,它遮蔽了底層的網路協議細節。採用命名管道完成程序通訊的過程為 1.在伺服器端呼叫createnamedpipe建立命名管道之後,呼叫connectnamedpipe函式讓伺服器程序等待客戶端程序連線到該命名管道的例項上。2.在客戶端,首先呼叫waitnamedpip...

程序通訊 命名管道

handle winapi createnamedpipe in lpctstr lpname,名稱 必須為 pipe pipename格式,表示本地主機,如需聯網,就用主機名 in dword dwopenmode,開啟方式這裡用雙工pipe access duplex in dword dwpi...