命名管道跨进程通讯

客户端代码:

#include "stdafx.h"  #include   #include   #include     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!");          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!");      }      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!");                  break;              }              else              {                  printf("To Server: data = %s, size = %d", buf, wlen);                  char rbuf[256] = "";                  DWORD rlen = 0;                  ReadFile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);  //接受服务发送过来的内容                  printf("From Server: data = %s, size = %d", rbuf, rlen);              }              Sleep(1000);          }          CloseHandle(hPipe);//关闭管道      }        system("pause");      return 0;  }

登录后复制

服务端代码:

#include "stdafx.h"  #include   #include   #include     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)",GetLastError());      }      else      {          printf("Waiting For Client Connection...");            if(!ConnectNamedPipe(hPipe, NULL))  //阻塞等待客户端连接。          {              printf("Connection failed!");          }          else          {              printf("Connection Success!");          }            while (true)          {              if(!ReadFile(hPipe,buf,256,&rlen,NULL)) //接受客户端发送过来的内容              {                             printf("Read Data From Pipe Failed!");                  break;              }              else              {                  printf("From Client: data = %s, size = %d", 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", wbuf, wlen);                  Sleep(1000);              }          }          FlushFileBuffers(hPipe);           DisconnectNamedPipe(hPipe);           CloseHandle(hPipe);//关闭管道      }        system("pause");      return 0;  }

登录后复制

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2493784.html

(0)
上一篇 2025年3月5日 01:38:46
下一篇 2025年2月23日 06:49:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用 Go 语言中的管道对管道进行基准测试?

    要对管道进行基准测试,可使用 go 语言 pipeline 包中的 benchmark 包:创建一个管道,并包含数据读取、数据处理和数据输出步骤。将 benchmark.run 传递给管道以对管道进行基准测试。管道基准测试提供了对管道吞吐量…

    2025年3月4日
    200
  • 如何在 Go 语言中使用管道与消息队列进行交互?

    在 go 语言中,管道用于在协程之间传递数据,而消息队列(mq)提供了更多的特性,如持久性。要使用管道和 mq,您可以:创建一个无缓冲管道,用于传递数据。使用客户端库(如 sarama)与 mq 交互。使用管道作为消息缓冲区,以解耦消息消费…

    2025年3月4日
    200
  • 厉害了!799 元普通手机变卫星通讯手机

    国产科技创新企业千寻位置今日正式推出面向大众市场的卫星通信终端 ” 北斗信使 “,旨在以亲民价格普及卫星通信技术。该设备小巧便携,功能强大,打破了卫星通信作为高端机型专属的现状。 1. 北斗信使设计紧凑,重量轻,便于…

    2025年3月2日
    200
  • Golang开发:构建高效的数据处理管道

    Golang开发:构建高效的数据处理管道,需要具体代码示例 引言:在当前大数据时代,数据处理已经成为了许多应用的关键。为了处理庞大的数据集,我们需要高效的数据处理管道。Golang作为一门强大的编程语言,提供了丰富的并发和并行处理能力,非常…

    2025年3月1日
    200
  • 理解Go语言中线程和进程的异同

    理解 go 语言中的线程与进程:线程是进程中的轻量级执行单元,共享相同内存;进程是操作系统执行单元,拥有独立资源和隔离性。进程优势:隔离性、简单 ipc;劣势:高开销、特殊内存共享处理。线程优势:低开销、方便内存共享;劣势:故障影响、需要同…

    2025年3月1日
    200
  • Go语言中线程和进程的区别解析

    go 语言中的进程和线程:进程:独立运行的程序实例,拥有自己的资源和地址空间。线程:进程内的执行单元,共享进程资源和地址空间。特点:进程:开销大,隔离性好,独立调度。线程:开销小,共享资源,内部调度。实战案例:进程:隔离长时间运行的任务。线…

    2025年3月1日
    200
  • 探秘Go语言中线程和进程的差异

    线程和进程是 go 语言并发编程中的不同概念。线程是轻量级执行单元,共享进程资源,而进程是独立运行的程序实例,拥有自己的资源空间。线程创建和切换开销低,而进程更高。线程共享主线程上下文,而进程独立。线程适合并行独立任务,进程适合隔离不同组件…

    2025年3月1日
    200
  • 如何使用 Go 语言中的管道实现超时机制?

    使用管道实现超时机制:创建一个管道。创建一个 goroutine 来等待管道中的元素。在另一个 goroutine 中,在指定时间后关闭管道。使用 select 语句来在管道元素到达或超时时选择执行相应的操作。 如何在 Go 语言中使用管道…

    2025年3月1日
    200
  • 如何在 Go 语言中使用管道与协程进行交互?

    通过结合管道(用于数据传输)和协程(用于并行任务执行),可以实现高效的并行和并发交互。管道通过 chan 关键字创建,协程通过 go 关键字创建。交互通过向管道发送和接收数据进行,管道传递给协程。实战案例包括并发处理任务,例如并行处理图像文…

    2025年3月1日
    200
  • 如何在 Go 语言中使用管道进行多路复用和解多路复用?

    管道是 go 语言中用于 goroutine 通信的机制。它们可用于复用和解复用输入和输出。复用是指将多个 goroutine 的输入合并到一个管道中,可以通过带有 chan 关键字声明的管道来实现。解复用与之相反,它涉及将来自单个管道的输…

    2025年3月1日
    200

发表回复

登录后才能评论