【转】C++ 进程间的通讯(一):简单的有名管道实现
--------------------------------------------------
进程间的通讯(一):简单的有名管道实现
一 管道简介
二 实现代码
Server Code:
- #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)==NULL) //阻塞等待客户端连接。
- {
- printf("Connection failed!\n");
- }
- else
- {
- printf("Connection Success!\n");
- }
- while (true)
- {
- if(ReadFile(hPipe,buf,256,&rlen,NULL)==FALSE) //接受客户端发送过来的内容
- {
- 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);
- }
- }
- CloseHandle(hPipe);//关闭管道
- }
- system("PAUSE");
- return 0;
- }
Clietn Code:
- #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++ 进程间的通讯(一):简单的有名管道实现的更多相关文章
- 进程间的通讯(IPC)方式
内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 ...
- [转]WINDOW进程间数据通讯以及共享内存
1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同 ...
- 8.7 进程间的通讯:管道、消息队列、共享内存、信号量、信号、Socket
进程间的通讯 进程间为什么需要通讯? 共享数据.数据传输.消息通知.进程控制 进程间的通讯有哪些类型? 首先,联系前面讲过的知识,进程之间的用户地址空间是相互独立的,不能进行互相访问,但是,内核空间却 ...
- .Net下的进程间的通讯 -- Windows消息队列
Windows 消息队列(MSMQ),是微软Windows2000以上的操作系统的一个服务,可以提供在计算机间消息的可靠传输,用来在两个进程间进行异步通讯最合适不过了.在.Net中有一个Message ...
- AIDL机制实现进程间的通讯实例
转载自:http://blog.csdn.net/cjjky/article/details/7562652 ======================================= 在Andr ...
- 进程间的通讯————IPC
""" IPC 指的是进程间通讯 之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程 然而 进程内存是物理隔离的 解决方案: 1.将共享数据放 ...
- 进程之间的通讯Queue简单应用
#进程间通讯--Queue #Process有时需要通信的,操作系统提供了很多机制来实现进程之间的通讯 #而Queue就是其中一个 #1.Queue的使用 #可以使用multiprocessing模块 ...
- python进程间的通讯实现
1:进程间通讯的方法:apply_async()非阻塞式通讯 apply()阻塞式通讯 2:使用Queue实现对Process创建的进程间通讯, Queue本身是一个消息队列程序,Queue常 ...
- 一个进程间同步和通讯的 C# 框架
转自原文 一个进程间同步和通讯的 C# 框架 threadmsg_demo.zip ~ 41KB 下载 threadmsg_src.zip ~ 65KB 下载 0.背景简介 微软在 .NE ...
随机推荐
- windows保存tomcat的控制台日志到文件
startup.bat修改:call "%EXECUTABLE%" start %CMD_LINE_ARGS%改为:call "%EXECUTABLE%" ru ...
- java 对sql格式化
public class SqlFormat{ public static void main(String[] args){ String sql=""; sqlFormat(s ...
- Farseer.net轻量级开源框架说明及链接索引
Farseer.net是什么? 基于.net framework 4 开发的一系列解决方案. 完全开源在GitHub中托管.并发布到NuGet中. Farseer.Net由最初的关系数据库ORM框架后 ...
- Python+CGI,在Windows上快速部署Python到IIS
通过CGI,我们可以快速在Windows上部署Python 1. Windows安装IIS服务 2. 在IIS里打开“ISAPI和CGI限制”->添加,路径=python.exe的完全路径+&q ...
- 迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派
免费视频教程: 为初学者精心录制的整套视频教程全部免费,随IT技术发展而不断增添的视频教程仍然免费!一支有经验的工程师团队会始终成为您的后盾. 项目实战---全开源: 手机远程控制开发板 门禁系统 W ...
- js正则表达式,只允许输入纯数字或‘/’
//输入框,限数字和/----需要多个数量询价,请以/分隔 function onlyonce(obj) {//先把非数字的都替换掉,除了数字和.obj.value = obj.value.repla ...
- 在CentOS6.4上安装GitLab
1.Install and configure the necessary dependencies On CentOS 6 (and RedHat/Oracle/Scientific Linux 6 ...
- Python模块 shelve xml configparser hashlib
常用模块1. shelve 一个字典对象模块 自动序列化2.xml 是一个文件格式 写配置文件或数据交换 <a name="hades">123</a>3. ...
- 零基础入门学习Python(18)--函数:灵活即强大
前言 上一节课我们基本介绍Python函数的用法,这一节课我们主要针对函数的参数进行进一步的深入学习. 知识点 形参(parameter)和实参(argument) >>> def ...
- Buffer.from()
Buffer.from(array) array {Array} 使用一个8位字节的数组分配一个新的 Buffer. const buf = Buffer.from([0x62, 0x75, 0x66 ...