C/C++ 进程通讯(命名管道)的实例

发布时间 - 2026-01-11 02:44:21    点击率:

服务端代码:

// pipe_server.cpp : 定义控制台应用程序的入口点。
//
 
#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;
}

客户端代码:

// pipe_client.cpp : 定义控制台应用程序的入口点。
//
 
#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;
}

以上这篇C/C++ 进程通讯(命名管道)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 进程通讯  # 命名管道  # C++获取当前进程IAT的方法  # C++进程共享数据封装成类实例  # C++进程间共享数据实例  # C++进程的创建和进程ID标识详细介绍  # 客户端  # 给大家  # 应用程序  # 句柄  # 希望能  # 这篇  # 小编  # 服务端  # 大家多多  # 一种特殊  # hPipe  # HANDLE  # DWORD  # TEXT  # CreateNamedPipe  # char  # buf  # rlen  # time  # NULL 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS验证手机号的正则表达式  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  做企业网站制作流程,企业网站制作基本流程有哪些?  EditPlus中的正则表达式 实战(1)  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  如何获取上海专业网站定制建站电话?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  音乐网站服务器如何优化API响应速度?  图册素材网站设计制作软件,图册的导出方式有几种?  如何在腾讯云服务器上快速搭建个人网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel中的Facade(门面)到底是什么原理  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  如何快速登录WAP自助建站平台?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel API资源类怎么用_Laravel API Resource数据转换  简单实现Android文件上传  Linux后台任务运行方法_nohup与&使用技巧【技巧】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  英语简历制作免费网站推荐,如何将简历翻译成英文?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel如何实现用户密码重置功能?(完整流程代码)  php json中文编码为null的解决办法  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何使用Blade组件和插槽?(Component代码示例)  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  教你用AI将一段旋律扩展成一首完整的曲子  Mybatis 中的insertOrUpdate操作  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何用狗爹虚拟主机快速搭建网站?  如何获取免费开源的自助建站系统源码?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  WordPress 子目录安装中正确处理脚本路径的完整指南  装修招标网站设计制作流程,装修招标流程?  如何快速生成ASP一键建站模板并优化安全性?  浅谈javascript alert和confirm的美化  Swift中循环语句中的转移语句 break 和 continue  5种Android数据存储方式汇总  如何在香港服务器上快速搭建免备案网站?  如何在自有机房高效搭建专业网站?  如何在Windows 2008云服务器安全搭建网站?