进程通信系列-命名管道
来源:互联网 发布:广东省大数据管理局 编辑:程序博客网 时间:2024/04/29 09:22
命名管道作为一种通信方法,有其独特的优越性,这主要表现在它不完全依赖于某一种协议,而是适用于任何协议——只要能够实现通信。
命名管道具有很好的使用灵活性,表现在:
1) 既可用于本地,又可用于网络。
2) 可以通过它的名称而被引用。
3) 支持多客户机连接。
4) 支持双向通信。
命名管道具有很好的使用灵活性,表现在:
1) 既可用于本地,又可用于网络。
2) 可以通过它的名称而被引用。
3) 支持多客户机连接。
4) 支持双向通信。
5) 支持异步重叠I/O操作。
代码长度长
命名管道类
#include "stdafx.h"#include "guandao.h"guandao::guandao(void){hpipe=NULL;flag=0;}guandao::~guandao(void){if(hpipe)CloseHandle(hpipe);}int guandao::free(){CloseHandle(hpipe);hpipe=NULL;return 1;}int guandao::have(){if(!hpipe)return 0;char szOutput[1024+10];DWORD cntReadedChar=0;long a=PeekNamedPipe(hpipe, szOutput, 1, &cntReadedChar, NULL, 0);if(szOutput[0] ==-52) return 0;return 1;}int guandao::create(CString sever,CString name ){hpipe=CreateNamedPipe("\\\\"+sever+"\\pipe\\"+name,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,0,1,1024,1024,500,NULL);if(hpipe==INVALID_HANDLE_VALUE){MessageBox(NULL,"创建命名管道"+name+"失败","error",MB_ICONERROR);hpipe=NULL;return 0;}//创建匿名人工重置对象HANDLE hevent;hevent=CreateEvent(NULL,true,false,NULL);if(!hevent){MessageBox(NULL,"创建事件对象失败","error",MB_ICONERROR);CloseHandle(hpipe);hpipe=NULL;return 0;}OVERLAPPED ovlap;ZeroMemory(&ovlap,sizeof(OVERLAPPED));ovlap.hEvent=hevent;MessageBox(NULL,"等待客户端","ok",MB_ICONINFORMATION);if(!ConnectNamedPipe(hpipe,&ovlap)){if(ERROR_IO_PENDING!=GetLastError()){MessageBox(NULL,"等待客户端失败","error",MB_ICONERROR);CloseHandle(hpipe);CloseHandle(hevent);hpipe=NULL;return 0;}}if(WAIT_FAILED==WaitForSingleObject(hevent,INFINITE)){MessageBox(NULL,"等待对象失败","error",MB_ICONERROR);CloseHandle(hpipe);CloseHandle(hevent);hpipe=NULL;return 0;}CloseHandle(hevent);MessageBox(NULL,"创建完成","ok",MB_ICONINFORMATION);flag=1;return 1;}CString guandao::read(){char s[200];DWORD d;if(!ReadFile(hpipe,s,200,&d,NULL)){MessageBox(NULL,"读取数据失败","error",MB_ICONERROR);return "";}return s;}int guandao::write(CString content){DWORD d;if(!WriteFile(hpipe,content,content.GetLength()+1,&d,NULL)){MessageBox(NULL,"写入数据失败","error",MB_ICONERROR);return 0;}return 1;}int guandao::connect(CString sever,CString name ){if(flag){MessageBox(NULL,"已创建管道","error",MB_ICONERROR);return 0;}CString nn="\\\\"+sever+"\\pipe\\"+name;if(!WaitNamedPipe(nn,500)){MessageBox(NULL,"无可用管道","error",MB_ICONERROR);return 0;}hpipe=CreateFile(nn,GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hpipe==INVALID_HANDLE_VALUE){MessageBox(NULL,"链接命名管道"+name+"失败","error",MB_ICONERROR);hpipe=NULL;return 0;}//MessageBox(NULL,"链接完成","ok",MB_ICONINFORMATION);return 1;}
- 进程通信系列-命名管道
- linux下进程间通信系列(管道和命名管道)
- 命名管道进程通信
- 进程间通信系列(6)命名管道
- 进程间通信---命名管道
- 进程间通信---命名管道
- 进程间通信--命名管道
- 进程间通信----命名管道
- 进程间通信命名管道
- 进程通信--命名管道(FIFO)
- 【Linux】 进程通信--命名管道
- 进程间通信-命名管道
- unity3D 命名管道 进程通信
- 进程间通信--命名管道
- 进程间通信---命名管道
- 进程间通信-命名管道
- 进程通信—命名管道
- 进程间通信--命名管道
- 黑客 vs 工程师
- saltstack官方文档——Salt File Server
- 雷军VS黄章:现实主义和梦幻主义的商业对决
- Android NDK 移植FFMPEG v0.6
- 京东 vs 苏宁:两个穷人的流血战争
- 进程通信系列-命名管道
- 微信公众平台消息接口开发(2)
- 程序员:编程能力vs职业技能,哪个更重要
- 谷歌眼镜将不准程序开发商放置广告
- JavaScript小数四舍五入toFixed
- 进程通信系列-匿名管道
- 奇虎 360 败诉不服向最高院上诉
- 阿里手机操作系统全新策略发布
- sublime text 2安装与配置