利用命名管道实现进程之间的通信 .........

简介:   /*   命名管道不仅可以实现 本地进程之间的通信还可以实现网络进程的通信   与油槽不同的是 管道式基于面向连接的可靠的通信 只能一对一传输 数据   我们可以通过      CreateNamedPipe()创建一个管道 ,可以指定模式是双向 即客户端 和服务端都可以进...
 

/*
  命名管道不仅可以实现 本地进程之间的通信还可以实现网络进程的通信   与油槽不同的是 管道式基于面向连接的可靠的通信 只能一对一传输 数据
  我们可以通过
     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 ;
 }

 

}

 

 

 

目录
相关文章
|
1月前
|
消息中间件 Unix Linux
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
53 1
|
1月前
|
Linux Shell
【Linux 进程间通讯 管道】使用Linux管道进行linux进程间通信
【Linux 进程间通讯 管道】使用Linux管道进行linux进程间通信
31 1
|
1月前
|
缓存 Unix Linux
进程间通信之匿名管道和命名管道的理解和实现【Linux】
进程间通信之匿名管道和命名管道的理解和实现【Linux】
|
3月前
|
Linux
Linux有名管道学习——实现两个进程的简单聊天
Linux有名管道学习——实现两个进程的简单聊天
45 0
|
1天前
|
Linux
【linux进程间通信(一)】匿名管道和命名管道
【linux进程间通信(一)】匿名管道和命名管道
|
1月前
|
消息中间件 Linux API
跨进程通信设计:Qt 进程间通讯类全面解析
跨进程通信设计:Qt 进程间通讯类全面解析
80 0
|
1月前
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
34 0
|
1月前
|
SQL 网络协议 Windows
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
|
2月前
|
Python
Python多进程间通信的最佳实践
Python多进程间通信的最佳实践
|
2月前
|
消息中间件 Linux
Linux下的系统编程——进程间的通信(九)
Linux下的系统编程——进程间的通信(九)
37 1
Linux下的系统编程——进程间的通信(九)

相关实验场景

更多