以命名管道方式實現網路程序間通訊的乙個例項

2021-04-13 04:54:59 字數 2495 閱讀 6062

win32

位api

集支援的命名管道

(named pipe)

是實現網路程序間通訊的一種有效手段。命名管道的介面比較簡單

,在程式中實現比較方便

,由其開發的應用程式也很容易使用

,只要知道機器及管道的名稱即可連線兩台機器上的兩個程序。

命名管道首先由一程序呼叫

createnamedpipe

函式建立

,這一建立命名管道的程序稱為

server程序,

然後server

程序通過呼叫

connectnamedpipe

函式等待一客戶相連。在管道的另一段

,client

程序用createfile

函式或callnamedpipe

函式開啟管道控制代碼

,若無可用的管道例項

,client

程序可呼叫

waitnamedpipe

函式等待。一旦連線成功

,client

程序和server

程序可呼叫函式

readfile

、writefile

或readfileex

、writeileex

傳輸資訊。

筆者在應用程式開發過程中

,曾用命名管道方法做了實現網路兩程序間通訊的乙個小例子。這一例子實現了網路兩程序間文字的實時互編輯操作

,即在任一台機器上對文字的修改可實時反映到另一台機器上

,就好像這一修改是在另一台機器上進行的一樣。下面就對這一實驗程式作一介紹。

程式分兩部分

:server

部分和client

部分。文中只介紹與命名管道實現有關的內容。

server部分

#define bufsize 1280

handle hpipe; ∥

管道控制代碼

bool fconnected;

int success=0;

typedef struct infor;

∥資訊傳輸結構

struct infor info;

∥包含編輯控制的對話方塊

bool far pascal _export pipeserverdlg(hwnd hdlg uint message,wparam wparam,lparam iparam)

} if (succes==1)

return(true);

case wm_timer;

if (succes==1)

if (info.type==1)

setdlgitemtext(hdlg,idc_edit1,info.text); ∥

根據對方的變化修改編輯控制內容 }

}break;

case wm_command;

if (get_wm_command_id(wparam,lparam)==idok)

succes=0;

enddialog(hdlg,true);

return(true); }

if (succes==1&& loword(wparam)==idc_edit1&& hiword(wparam)== en_update)

break; }

return(false); }

client部分

#define bufsize 1280

handle hpipe

∥管道控制代碼

bool fconnected;

int succes=0,flag=0; ∥

資訊傳輸結構

typedef struct infor ;

struct infor info; ∥

包含編輯控制的對話方塊

bool far pascal __export pipeclientdlg(hwnd hdlg,uint message,wparam wparam, lparam lparam)

else

if (succes==1)

} if(succes==1)

if (info.type==1)

setdlgitemtext(hdlg.idc_edit1,info.text); }

}break;

case wm_command;

if (get_wm_command_id(wparam,1param)==idok)

succes = 0;

flag = 0;

enddialog(hdlg,true);

return(true); }

if(succes==1&&loword(wparam)==idc_edit1&&hiword(wparam)==en_update)

break; }

return(false); }

命名管道實現程序間通訊

include include include include include include include define fifo server tmp myfifo main int argc,char argv argc 引數個數?argv 引數 else printf write s to...

Linux C命名管道實現程序間通訊

命名管道 命名管道也被稱為fifo檔案,它是一種特殊型別的檔案,它在檔案系統中以檔名的形式存在,但是它的行為卻和之前所講的沒有名字的管道 匿名管道 類似。建立命名管道 以下兩個函式都可以用來建立命名管道 任選乙個 函式原型如下 include include int mkfifo const cha...

程序間通訊 命名管道

程序間通訊的本質是不同的程序看到了同乙份公共的資源。而管道的 乙個不 足之處是沒有名字,因此,只能 用於具有親緣關係的程序間通訊,在命名管道 named pipe或fifo 提出後,該限制得到了克服。fifo不同於管道之處在於它提供 乙個路徑名與之關聯,以fifo的 檔案形式儲存於 檔案系統中。命名...