命名管道跨进程通讯

命名管道跨进程通讯,第1张

概述命名管道跨进程通讯 客户端代码:


#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 == hPipe)      {          printf("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 = %s, size = %d\n", buf, wlen);                  char rbuf[256] = "";                  DWORD rlen = 0;                  Readfile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);  //接受服务发送过来的内容                  printf("From Server: data = %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 == hPipe)      {          printf("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 = %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 = %s, size = %d\n", wbuf, wlen);                  Sleep(1000);              }          }          Flushfilebuffers(hPipe);           disconnectnamedPipe(hPipe);           CloseHandle(hPipe);//关闭管道      }        system("pause");      return 0;  }
总结

以上是内存溢出为你收集整理的命名管道跨进程通讯全部内容,希望文章能够帮你解决命名管道跨进程通讯所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1211823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存