[进程间通信]利用油槽来实现进程间的通信
来源:互联网 发布:手机淘宝家乡版在哪里 编辑:程序博客网 时间:2024/05/17 16:44
油槽是
1:基于广播通信设计出来的
2:它采用无连接的不可靠的数据传输
3:是一种单向的通信方式
4:油槽的服务器进程读取数据,客户端进程写入数据
5:消息的长度在424字节以下(大约210个汉字)
实现步骤:
1:建立一个MFC AppWizard,名为MailslotSrv的单文档程序,添加一个菜单项,名为“接收数据”,IDM_MAILSLOT_RECE,在view内下为该菜单添加命令响应
2:在响应函数内编写以下代码,
void CMailslotSrvView::OnReceive() {// TODO: Add your command handler code hereHANDLE hMailslot; //创建一个油槽句柄hMailslot = CreateMailslot("\\\\.\\mailslot\\MyMailslot",0,MAILSLOT_WAIT_FOREVER,NULL);//创建油槽,具体用法参见MSDNif(INVALID_HANDLE_VALUE == hMailslot) //如果创建油槽失败,提示用户{MessageBox("创建邮槽失败");return;}char buf[100];//读取数据DWORD dwRead;if(!ReadFile(hMailslot,buf,100,&dwRead,NULL)){MessageBox("读取数据失败");CloseHandle(hMailslot);//关闭油槽的句柄hMailslot = NULL;return;}MessageBox(buf);CloseHandle(hMailslot);//读取数据成功与失败都要关闭油槽句柄,避免析构时再次调用到。}
3:添加一个MFC AppWizard新工程,名为MailslotClt,与MailslotSrv在同一文件目录下(平行目录),同样添加一个菜单,名为“发送数据”,添加命令响应。
4:在命令响应函数内添加以下代码,
void CMailslotCltView::OnSend() {// TODO: Add your command handler code here//基于广播通信HANDLE hMailslot;hMailslot = CreateFile("\\\\.\\mailslot\\MyMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//只能发送数据if(INVALID_HANDLE_VALUE == hMailslot){MessageBox("打开邮槽失败");return;}char buf[] = "Hello,Mailslot";DWORD dwWrite;if(!WriteFile(hMailslot,buf,strlen(buf) + 1,&dwWrite,NULL)){MessageBox("写入数据失败");CloseHandle(hMailslot);return;}CloseHandle(hMailslot);}
5:分别编译后运行即可。
注意:先在服务器端上单击“接收数据”,然后在客户端单击“发送数据”。顺序颠倒的话程序无法正常运行,因为油槽没有创建就不必谈通信了。
这是两个进程之间进行的通信(单向)
同一个进程中如何实现读写数据?
很简单,在一个程序中同时编写油槽的服务器端和客户端,用服务器端接收数据,用客户端发送数据。
我们可以利用油槽的广播特性来制作一个会议通知系统,相比之下其程序代码量会非常少。若是同样的系统用socket来实现将会相当复杂。
在所有员工的电脑上安装一个油槽服务器程序,在管理人员电脑上安装一个油槽客户端程序即可实现会议通知。如果要发布一个开会信息,只需要在客户程序中发送出这个信息,那么所有员工将会同时接收到这个通知信息。这样就形成了一个简单的一对多单向通信。
油槽和命名管道一样,不仅可以台主机上完成进程间的通信,而且可以进行跨网络的通信。对于剪贴板和匿名管道来说,它们只能实现在同一台机器上进程间的通信。
油槽可以实现一对多通信,但是传输的数据量非常小。若要传输大量数据可以采用管道方式来完成。
- [进程间通信]利用油槽来实现进程间的通信
- 利用油槽实现进程之间的通信
- 进程间通信之油槽
- 进程间的通信(二):命名管道 和 油槽
- 利用多线程和油槽实现进程间通讯!
- 利用WM_COPYDATA实现进程间通信
- 利用共享内存实现进程间通信
- 利用共享内存实现进程间通信
- 利用SendMessage实现C#进程间通信
- 利用WM_DATACOPY消息实现进程间通信
- 利用SendMessage实现C#进程间通信
- 利用SendMessage实现C#进程间通信
- 利用内存映射实现进程间通信
- 利用管道实现进程间通信
- 利用共享内存实现进程间通信
- Linux利用管道实现进程间通信
- 利用管道实现进程间通信
- 进程间的通讯之油槽
- SVN客户端使用手册
- 强制删除windows文件的终极解决方法
- DataGridView导出到Excel时“未将对象引用设置到对象的实例”
- getSharedPreferences 与 getPreferences 与getDefaultSharedPreferences的区别
- android multi process and single thread principle
- [进程间通信]利用油槽来实现进程间的通信
- 贪占了我的系统资源 php-fpm
- @override错误
- 同义词
- Android中asset文件夹和raw文件夹区别
- Graph Definition
- V9常用代码整理
- ios 快速启动优化
- VirtualBox 安装虚拟机时出现错误 VT-x features locked or unavailable in MSR.