Visual C++網路程式設計經典案例詳解 第3章 多執行緒與非同步套接字程式設計 程序間通訊 命名管道 命名管道例項
vc新增控制檯工程 名字命名管道例項 新增原始檔 名字 伺服器
#include<windows.h> //包含標頭檔案 #include<stdio.h>
int main() { HANDLE hpip; //定義命名管道控制代碼 OVERLAPPED ovi={0}; //定義結構體變數 char buf[200]; //定義資料緩衝區 DWORD readbuf; //獲取實際讀取位元組數 hpip=CreateNamedPipe("\\\\.\\pipe\\pipename", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE, PIPE_UNLIMITED_INSTANCES,1024,1024,0, NULL); //建立命名管道 printf("建立管道成功,正在等待客戶端連線!\r\n"); if(::ConnectNamedPipe(hpip,&ovi)) //等待客戶端的連線請求 { printf("客戶端連線成功!\r\n"); printf("正在讀取資料!\r\n"); //提示資訊 if(ReadFile(hpip,buf,200,&readbuf,NULL)) //讀取管道資料 { printf("資料讀取成功\r\n"); //提示資訊 printf("讀取的資料是:%s\r\n",buf); } else { printf("資料讀取失敗\r\n"); } } return 0; }
編譯後,生成命名管道伺服器 新建工程,新增C++原始檔 名字為客戶端 #include<windows.h> //包含標頭檔案 #include<stdio.h>
int main() { HANDLE hpip; OVERLAPPED ovi={0}; char buf[]="命名管道測試程式123"; //定義資料緩衝區 DWORD readbuf; //定義結構體變數 printf("正在連線命名管道!\r\n"); if(WaitNamedPipe("\\\\.\\pipe\\pipename", NMPWAIT_WAIT_FOREVER)) //連線命名管道 { //開啟指定命名管道 hpip=CreateFile("\\\\.\\pipe\\pipename", GENERIC_READ| GENERIC_WRITE,0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); if(hpip==INVALID_HANDLE_VALUE) //開啟命名管道失敗 { printf("開啟命名管道失敗\r\n"); } else { if(WriteFile(hpip,buf,sizeof(buf),&readbuf,NULL)) //寫入資料到管道 { printf("資料寫入成功\r\n"); //提示資訊 } else { printf("資料寫入失敗\r\n"); } } } else { printf("連線命名管道失敗\r\n"); //提示資訊 } return 0; }
編譯後 將伺服器開啟 後開客戶端
伺服器輸出 客戶端開啟前 建立管道成功,正在等待客戶端連線!
伺服器輸出 客戶端開啟後 建立管道成功,正在等待客戶端連線! 客戶端連線成功! 正在讀取資料! 資料讀取成功 讀取的資料是:命名管道測試程式123 Press any key to continue
客戶端輸出 伺服器開啟前 正在連線命名管道! 連線命名管道失敗 Press any key to continue
客戶端輸出 伺服器開啟後 正在連線命名管道! 資料寫入成功 Press any key to continue