不学网

 找回密码
 立即注册

只需一步,快速开始

手机号码,快捷登录

查看: 94|回复: 0

[c/c++] 管道同步通信

[复制链接]
BiaoGe 发表于 2018-8-26 19:57:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
管道通信,一对一通信例子。
服务端:
  1. #include <stdio.h>
  2. #include <Windows.h>

  3. int main(void)
  4. {
  5.         HANDLE hPipe = NULL;
  6.         char buf[255] = { 0 };
  7.         DWORD dwLen = 0;

  8.         // 创建命名管道
  9.         hPipe = CreateNamedPipe("\\\\.\\Pipe\\biaoge",  // 管道名字
  10.                 PIPE_ACCESS_DUPLEX,                                                        // 可读写
  11.                 PIPE_TYPE_MESSAGE | PIPE_WAIT,                                // 消息类型 阻塞模式
  12.                 PIPE_UNLIMITED_INSTANCES,                                        // 最大实例 该常量代表255
  13.                 NULL,                                                                                // 默认输出缓存大小
  14.                 NULL,                                                                                // 默认输入缓存大小
  15.                 NULL,                                                                                // 默认客户端超时
  16.                 NULL                                                                                // 默认安全属性
  17.                 );
  18.         if (hPipe == INVALID_HANDLE_VALUE)
  19.         {
  20.                 printf("CreateNamedPipe failed:%d.\n", GetLastError());
  21.                 return 0;
  22.         }

  23.         printf("Wait client connect...\n");
  24.         // 等待客户端连接
  25.         if (ConnectNamedPipe(hPipe, NULL) == 0)
  26.         {
  27.                 printf("ConnectNamedPipe failed:%d.\n", GetLastError());
  28.                 return 0;
  29.         }
  30.         printf("Client in\n");
  31.         // 客户端进入,读取客户端发送的数据
  32.         if (ReadFile(hPipe, buf, sizeof(buf), &dwLen, NULL))
  33.         {
  34.                 printf("Recv:[%s]\n", buf);
  35.                 // 向客户端发送数据
  36.                 if (WriteFile(hPipe, "Hello Client!", 15, &dwLen, NULL))
  37.                 {
  38.                         printf("Send client data success!\n");
  39.                 }
  40.                 else
  41.                 {
  42.                         printf("Send client data failed!\n");
  43.                 }
  44.         }
  45.         // 关闭管道
  46.         CloseHandle(hPipe);
  47.         system("pause");
  48.         return 0;
  49. }
复制代码
客户端:
  1. #include <stdio.h>
  2. #include <Windows.h>

  3. int main(void)
  4. {
  5.         HANDLE hPipe = NULL;
  6.         DWORD dwLen = 0;
  7.         char str[255] = "Hello Biaoge,Testing Pipe!";

  8.         // 连接管道
  9.         hPipe = CreateFile("\\\\.\\Pipe\\biaoge", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
  10.         if (hPipe == INVALID_HANDLE_VALUE)
  11.         {
  12.                 printf("Connect server pipe failed:%d.\n", GetLastError());
  13.                 return 0;
  14.         }
  15.         printf("Connect server success!\n");
  16.         // 连接成功,向服务端发送一条数据
  17.         if (WriteFile(hPipe,str , lstrlen(str)+1, &dwLen, NULL))
  18.         {
  19.                 printf("Send data success!\n");
  20.         }
  21.         else
  22.         {
  23.                 printf("Send data failed:%d.\n", GetLastError());
  24.                 return 0;
  25.         }
  26.         // 接收服务端数据
  27.         if (ReadFile(hPipe, str, sizeof(str), &dwLen, NULL))
  28.         {
  29.                 printf("Recv server data:[%s]\n", str);
  30.         }
  31.         else
  32.         {
  33.                 printf("Recv server data failed!\n");
  34.         }
  35.         // 关闭管道
  36.         CloseHandle(hPipe);
  37.         system("pause");
  38.         return 0;
  39. }
复制代码
效果图

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-9-19 04:58

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表