首页后端开发ASP.NET命名管道跨进程通讯

命名管道跨进程通讯

时间2024-01-30 14:55:03发布访客分类ASP.NET浏览156
导读:收集整理的这篇文章主要介绍了命名管道跨进程通讯,觉得挺不错的,现在分享给大家,也给大家做个参考。客户端代码:#include "stdafx.h" #include <stdio.h> #include <window...
收集整理的这篇文章主要介绍了命名管道跨进程通讯,觉得挺不错的,现在分享给大家,也给大家做个参考。客户端代码:


#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;
  }
    

以上就是命名管道跨进程通讯的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

进程通讯

若转载请注明出处: 命名管道跨进程通讯
本文地址: https://pptw.com/jishu/592667.html
C++ 之 Asio 库 总结.NET如何获取当前路径的方法

游客 回复需填写必要信息