[C++] socket -8 [命名管道]
::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一进行传输。
- /*
- 命名管道服务器
- */
- #include<windows.h>
- #include<stdio.h>
- int main()
- {
- HANDLE hpip;//定义命名管道句柄
- OVERLAPPED ovi={};//定义结构体变量
- char buf[];//定义数据缓冲区
- DWORD readbuf;//获取实际读取字节数
- hpip=CreateNamedPipe("\\\\.\\pipe\\pipename",PIPE_ACCESS_DUPLEX,
- PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,,,,NULL);//创建命名管道
- printf("创建管道成功,正在等待客户端连接!\r\n");
- if(::ConnectNamedPipe(hpip,&ovi))//等待客户端的连接请求
- {
- printf("客户端连接成功\r\n");
- printf("正在读取数据!\r\n");
- if(ReadFile(hpip,buf,,&readbuf,NULL))//读取管道数据
- {
- printf("读取数据成功!\r\n");
- printf("读取数据是: %s\r\n",buf);
- }
- else
- {
- printf("读取数据失败\r\n");
- }
- }
- ::Sleep();
- return ;
- }
- /*
- 命名管道客户端
- */
- #include<windows.h>
- #include<stdio.h>
- int main()
- {
- HANDLE hpip;
- OVERLAPPED ovi={};
- char buf[]="命名管道测试程序!\r\n";//定义数据缓冲区
- DWORD readbuf;//定义结构体变量
- printf("正在连接命名管道!\r\n");
- if(WaitNamedPipe("\\\\.\\pipe\\pipename",NMPWAIT_WAIT_FOREVER))//连接命名管道
- {
- hpip=CreateFile("\\\\.\\pipe\\pipename",GENERIC_READ|GENERIC_WRITE,,
- NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//打开指定命名管道
- if(hpip==INVALID_HANDLE_VALUE)
- {
- printf("打开命名管道失败\r\n");
- }
- else
- {
- if(WriteFile(hpip,buf,sizeof(buf),&readbuf,NULL))//写入数据到管道
- {
- printf("数据写入成功!\r\n");
- }
- else
- {
- printf("数据写入失败\r\n");
- }
- }
- }
- else
- {
- printf("管道创建失败!\r\n");
- }
- ::Sleep();
- return ;
- }
[C++] socket -8 [命名管道]的更多相关文章
- C/S模型之命名管道
说明:利用管道实现服务端与客户端之间的交互.效果等同于利用socket. 命名管道(NamedPipe)是一种简单的进程间通信(IPC)机制,是服务器进程和一个或多个客户进程之间通信的单向或双向管道. ...
- 操作系统-进程通信(信号量、匿名管道、命名管道、Socket)
进程通信(信号量.匿名管道.命名管道.Socket) 具体的概念就没必要说了,参考以下链接. 信号量 匿名管道 命名管道 Socket Source Code: 1. 信号量(生产者消费者问题) #i ...
- 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等
一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...
- Windows进程间通信—命名管道
命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节.我们在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信.与Socket网络通信相比,命名管道不再需要编写身份验证的代码.将 ...
- 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三 多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...
- Linux环境进程间通信(一):管道及命名管道
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- 进程间通信系列 之 命名管道FIFO及其应用实例
进程间通信系列 之 概述与对比 http://blog.csdn.net/younger_china/article/details/15808685 进程间通信系列 之 共享内存及其实例 ...
- [C#]基于命名管道的一对多进程间通讯
在工作中碰到了一个进程间通讯的问题,大概是这样的: 项目本身是.net Core做的,但是有部分功能Core中不方便实现,有的是依赖Framework,有的是因为权限和安全问题. 那基于这个问题,问了 ...
- 命名管道FIFO和mkfifo函数
进程间通信必须通过内核提供的通道,而且必须有一种办法在进程中标识内核提供的某个通道,前面讲过的匿名管道是用打开的文件描述符来标识的.如果要互相通信的几个进程没有从公共祖先那里继承文件描述符,它们怎么通 ...
随机推荐
- 将Word发布到CSDN
将Word发布到CSDN 注:以Word2010为例 注册CSDN账号 打开Word新建一篇博客 打开"管理账户"新建一个账户,博客类别选择"其他" API选择 ...
- Builder(生成器)-对象创建型模式
一.意图 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. 二.动机 一个复杂的对象的构造过程中,原料相同,可能会要求生产不同的产品,并且生产的产品种类还能够方便的增加.Bu ...
- [原创]使用Pandoc实现Markdown文件转PDF文件
Markdown写法简单明快,我十分喜欢,以至于我最近都想使用Markdown快速的进行测试说明书的写作,但是考虑到这文档是要进行交接的,一个.md的文件在内部传输还是有不便,于是就想到了能不能把Ma ...
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...
- Java语言环境(JDK的安装教学)
//此文档由徐浩军编写(32/64位系统都适用) 1.下载JDK安装包你 2.点击安装包开始安装 3.首先你要选择安装地址一般情况下,都会选择默认地址. (请记住这个地址,之后配置环境变量的时候需要用 ...
- xll调试方法
1)打开编译好的debug下的xll 2)project property->Configuration Properties Debugging set Attach as "Yes ...
- fail2ban 原理 安装 使用
cd fail2ban python setup.py install /etc/fail2ban/ 为配置文件目录; /usr/lib/pythonx.x/site-packages/fail2ba ...
- Ubuntu 12.04(32位)安装Oracle 11g(32位)
安装过程(主要过程就直接copy别人的教程了)及问题: 1.将系统更新到最新: sudo apt-get updatesudo apt-get dist-upgrade 2. 如果使用的Ubuntu不 ...
- 如何正确接收 GitHub 的消息邮件
背景 我厂的开发流程通常都是基于 GitHub 的.在 GitHub 上 review 代码,也是我日常工作的重要组成部分.对我来说,在 code review 过程中最讨厌的莫过于,我在 pull ...
- 下载android 源码
http://source.android.com/source/downloading.html 1.下载repo 官网:curl http://commondatastorage.googleap ...