首页 > 代码库 > 命名管道跨进程通讯

命名管道跨进程通讯

客户端代码:

#include "stdafx.h"  #include <stdio.h>  #include <windows.h>  #include <ctime>    int main(int argc, _TCHAR* argv[])  {      srand(time(NULL));        DWORD wlen = 0;      Sleep(1000);//等待pipe的创建成功!        BOOL bRet = WaitNamedPipe(TEXT("\\\\.\\Pipe\\mypipe"), NMPWAIT_WAIT_FOREVER);        if (!bRet)      {          printf("connect the namedPipe failed!\n");          return 0;      }        HANDLE hPipe = CreateFile(          //管道属于一种特殊的文件          TEXT("\\\\.\\Pipe\\mypipe"),    //创建的文件名          GENERIC_READ | GENERIC_WRITE,   //文件模式          0,                              //是否共享          NULL,                           //指向一个SECURITY_ATTRIBUTES结构的指针          OPEN_EXISTING,                  //创建参数          FILE_ATTRIBUTE_NORMAL,          //文件属性(隐藏,只读)NORMAL为默认属性          NULL);                          //模板创建文件的句柄        if (INVALID_HANDLE_VALUE =http://www.mamicode.com/= hPipe)  "open the exit pipe failed!\n");      }      else      {          while(true)          {              char buf[256] = "";              sprintf(buf,"%s%d",buf,rand()%1000);              if(WriteFile(hPipe,buf,sizeof(buf),&wlen,0)==FALSE) //向服务器发送内容              {                  printf("write to pipe failed!\n");                  break;              }              else              {                  printf("To Server: data = http://www.mamicode.com/%s, size = %d/n", buf, wlen);                  char rbuf[256] = "";                  DWORD rlen = 0;                  ReadFile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);  //接受服务发送过来的内容                  printf("From Server: data = http://www.mamicode.com/%s, size = %d/n", rbuf, rlen);              }              Sleep(1000);          }          CloseHandle(hPipe);//关闭管道      }        system("pause");      return 0;  }  

服务端代码:

#include "stdafx.h"  #include <stdio.h>  #include <windows.h>  #include <ctime>    int main(int argc, _TCHAR* argv[])  {      srand(time(NULL));        char buf[256] = "";      DWORD rlen = 0;      HANDLE hPipe = CreateNamedPipe(          TEXT("\\\\.\\Pipe\\mypipe"),                        //管道名          PIPE_ACCESS_DUPLEX,                                 //管道类型           PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,  //管道参数          PIPE_UNLIMITED_INSTANCES,                           //管道能创建的最大实例数量          0,                                                  //输出缓冲区长度 0表示默认          0,                                                  //输入缓冲区长度 0表示默认          NMPWAIT_WAIT_FOREVER,                               //超时时间          NULL);                                              //指定一个SECURITY_ATTRIBUTES结构,或者传递零值        if (INVALID_HANDLE_VALUE =http://www.mamicode.com/= hPipe)  "Create Pipe Error(%d)\n",GetLastError());      }      else      {          printf("Waiting For Client Connection...\n");            if(!ConnectNamedPipe(hPipe, NULL))  //阻塞等待客户端连接。          {              printf("Connection failed!\n");          }          else          {              printf("Connection Success!\n");          }            while (true)          {              if(!ReadFile(hPipe,buf,256,&rlen,NULL)) //接受客户端发送过来的内容              {                             printf("Read Data From Pipe Failed!\n");                  break;              }              else              {                  printf("From Client: data = http://www.mamicode.com/%s, size = %d/n", buf, rlen);                                    char wbuf[256] = "";                  sprintf(wbuf, "%s%d", wbuf, rand()%1000);                  DWORD wlen = 0;                  WriteFile(hPipe, wbuf, sizeof(wbuf), &wlen, 0); //向客户端发送内容                  printf("To Client: data = http://www.mamicode.com/%s, size = %d/n", wbuf, wlen);                  Sleep(1000);              }          }          FlushFileBuffers(hPipe);           DisconnectNamedPipe(hPipe);           CloseHandle(hPipe);//关闭管道      }        system("pause");      return 0;  }  

 下篇,写下C# Name Pipe 跨进程通信

命名管道跨进程通讯