/*
命名管道不仅可以实现 本地进程之间的通信还可以实现网络进程的通信 与油槽不同的是 管道式基于面向连接的可靠的通信 只能一对一传输 数据
我们可以通过
CreateNamedPipe()创建一个管道 ,可以指定模式是双向 即客户端 和服务端都可以进行读写 管道 就跟基于 socket的TCP通信类似
在服务端调用ConnectNamedPipe()来等待客户端连接管道 ,不像函数英文名字那样连接管道 而是等地啊客户端连接的到来
在客户端我们需要调用 WaitNamedPipe()函数来连接管道
在完成以上的工作之后 我们就可以利用 CreateFile() ReadFile() WriteFile()进行进程之间的通信了
在 油槽 命名管道 磁盘文件的读写 的时候我们都用到了 CreateFile() ReadFile() WriteFile() 一样的函数 来进行操作
*/
///////////////////////服务端
#include <iostream>
#include "windows.h"
#include <string>
using namespace std ;
void main()
{
HANDLE hNamedPipe=::CreateNamedPipe("\\\\.\\pipe\\path", //管道名称 如果是不同主机需要吧.换成主机名字 或者直接换成*就可以实现全网内部的通信
PIPE_ACCESS_DUPLEX, //管道可以双向通信
PIPE_TYPE_BYTE,//数据以字节流的方式写入管道
PIPE_UNLIMITED_INSTANCES, //表示管道能够创建的最大实例数目 这里只和操作系统相关
1024, //输出缓冲区大小
1024,//输入缓冲区大小
0,//超时间隔
NULL//默认安全结构
) ;
OVERLAPPED ov={0} ; //定义一个OVERLAPPED结构体 并初始化为 0
::ConnectNamedPipe(hNamedPipe,&ov);
char buf[100] ;
DWORD len ;
string s ;
while(1)
{
ReadFile(hNamedPipe,(void*)buf,100,&len,NULL) ; //如果连接到来了 那么我们就从管道读取数据
cout<<"客户端说:"<<buf<<endl ;
cout<<"请输入发送给客户端的数据:"<<endl ;
cin>>s;
cout<<s<<endl ;
WriteFile(hNamedPipe,(void*)s.c_str(),s.length()+1,&len,NULL);
}
}
//////客户端
#include <iostream>
#include "windows.h"
using namespace std ;
void main()
{
if(!::WaitNamedPipe("\\\\.\\pipe\\path",NMPWAIT_WAIT_FOREVER) ) //连接管道
{
cout<<"连接管道失败!"<<endl ;
return ;
}
HANDLE h1=::CreateFile("\\\\.\\pipe\\path",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL) ; //打开管道
char buf[100] ;
DWORD len ;
while(1)
{
cout<<"请输入要写入的数据:"<<endl ;
cin>>buf ;
WriteFile(h1,(LPVOID)buf,strlen(buf)+1,&len,NULL) ;
ReadFile(h1,(LPVOID)buf,100,&len,NULL) ;
cout<<"服务器说:"<<buf<<endl ;
}
}
分享到:
相关推荐
2.4 实验四:使用命名管道实现进程通信.doc
2.4实验四:使用命名管道实现进程通信.doc
2.4实验四:使用命名管道实现进程通信.pdf
C--和C#进程之间通过命名管道通信(上).doc
利用共享内存及管道实现进程间通信,内附 server 及 client 两个通信进程源码,经测试可用。可供需要者参考,开发工具:VC++6.0。
2.4实验四:使用命名管道实现进程通信[汇编].pdf
服务端与客户端通过命名管道实现通信,收发均在子线程完成。
C# 进程间通信:命名管道方式例子 .net 2.0框架环境,进程间传递对象。
2 命名管道通信:利用mkfifo name mode 或mknod name mode 0 创建一个命名管道 然后利用它和文件部分系统调用实现不同进程间的通信 改造之 使之成为客户 服务器模式 并完成一定的任务(自己定义) 声明:资源位...
http://blog.csdn.net/ezhchai/article/details/74991304文章中讲解的示例程序完整工程文件
利用命名管道,跨进程通信工程调用,快速编写代码,完成功能.并提供一个学习实例.
本实例利用命名管道实现进程间通信,实现了不同进程间的发送数据和接收数据功能。
命名管道通信,与QT命名管道通信,C#与C#的通信
C++创建命名管道 实现客户端和服务器端之间的进程通信
利用命名管道实现本机两个进程之间通信。一个服务器,一个客户端。可以通过修改管道的名字实现网络通信(参照管道的命名方法),并且可以通过修改服务器创建管道时的参数,实现服务器与多个客户之间的的通信。 相...
用命名管道实现进程间通信,界面用的wpf。 客户端输入 例:1+1,点击send(点Send前请打开服务端) 服务端接收到并运算后将结果返回给客户端 vs2015 + .NET Framework4.5.2,Windows应用程序
使用命名管道来实现进程间通信,使用方法: 先打开NamedPipeServer.exe 再打开NamedPipeClient.exe 此时NamedPipeServer.exe界面上会提示输入 输入信息回车后会直接显示在NamedPipeClient.exe界面上
采用windows API 匿名管道实现进程间双向通信,代码有注释
进程间命名管道通信机制的使用 使用命名管道机制编写程序实现两个进程间的发送接收信息。
windows命名管道通信,两个进程通过命名管道通信