利用油槽实现进程之间的通信

// 油槽只能实现 一个进程写 一个进程读取服务器读取 客户端写入 在服务器端只需 创建油槽然后即可通过 ReadFile和 WriteFile就可以实现向油槽的读写功能
// 在客户端需要利用CreateFile来打开一个油槽 然后通过CreateFile和ReadFile进行油槽的读写操作
// 油槽不仅能实现在本地进程之间的通信还可以实现网络进程之间的通信
// 油槽名字的格式是 "\\\\.\\mailslot\\path" 如果服务端不在本地那么吧'.'换成主机名字
//如果要实现全网的通信那么就把'.' 换成* 表示网内所有主机

///服务器端代码

#include <iostream>
#include "windows.h"
using namespace std ;
void main()
{
HANDLE hMailslot=::CreateMailslot("\\\\.\\mailslot\\mail", //油槽的名称有固定格式
0, //指定可以写入到油槽的最大消息长度 0表示任意长度
MAILSLOT_WAIT_FOREVER, //发生油槽读取时间的等待时间 这里是一直等待 如果0的话油槽没有声音就会立即返回
NULL //油槽的安全结构属性默认为NULL
) ;
if(hMailslot==INVALID_HANDLE_VALUE)
{
cout<<"油槽打开失败 !"<<endl ;
}

char buf[100] ;
DWORD len ;
while(1)
{
::ReadFile(hMailslot,(void*)buf,100,&len,NULL) ;
cout<<"客户端说:"<<buf<<endl ;

}

}

/客户端代码
#include <iostream>
#include "windows.h"
using namespace std ;
void main()
{

HANDLE h1=::CreateFile("\\\\.\\mailslot\\mail",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE==h1)
{
cout<<"油槽打开失败"<<endl ;
return ;
}

char buf[100] ;
DWORD len;
while(1)
{
cout<<"请输入要写入到油槽的数据:"<<endl ;
cin>>buf;
::WriteFile(h1,(LPVOID)buf,strlen(buf)+1,&len,NULL) ;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值