1. 程式人生 > >Visual C++網路程式設計經典案例詳解 第3章 多執行緒與非同步套接字程式設計 程序間通訊 命名管道 命名管道例項

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