




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二,邮件槽与命名管道对比试验1实验内容编写程序,要求在客户端的命令行输入字符串并回车客户端把字符串发送到服务器,服务器再把收到的字符串传回客户端,通过命名管道及邮件槽方式完成,分析两种方式的利弊。2试验目的深入理解共享存储与消息传递的进程通信。3试验原理命名管道命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是:命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。命名管道提供了相对简单的编程接口,使通过网络传输数据并不比同一计算机上两进程之间通信更困难,不过如果要同时和多个进程通信它就力不从心了。邮件槽邮件槽(Mailslots)提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。通过邮件槽可以给本地计算机上的邮件槽、其它计算机上的邮件槽或指定网络区域中所有计算机上有同样名字的邮件槽发送消息。广播通信的消息长度不能超过400字节,非广播消息的长度则受邮件槽服务器指定的最大消息长度的限制。邮件槽与命名管道相似,不过它传输数据是通过不可靠的数据报(如TCP/IP协议中的UDP包)完成的,一旦网络发生错误则无法保证消息正确地接收,而命名管道传输数据则是建立在可靠连接基础上的。不过邮件槽有简化的编程接口和给指定网络区域内的所有计算机广播消息的能力,所以邮件槽不失为应用程序发送和接收消息的另一种选择。传输安全性:由于邮槽是围绕一个广播通信体系设计出来的,所以当然不能指望能通过它实现数据的可靠传输;优缺点:邮槽最大的一个缺点便是只允许从客户机到服务器,建立一种不可靠的单向数据通信。而另一方面,邮槽最大的一个优点在于,它们使客户机应用能够非常容易地将广播消息发给一个或多个服务器应用。4程序源代码命名管道服务器代码:string m_sMessage;char buffer1024;DWORD ReadNum;HANDLE m_hPipe = CreateNamedPipe(.PipeTest,PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,1,0,0,1000,NULL);cout命名管道服务器界面nnn;if(m_hPipe=INVALID_HANDLE_VALUE)m_sMessage=创建命名管道失败!;coutm_sMessageendl;return 0;elsem_sMessage=成功创建命名管道!;coutm_sMessageendl;if(ConnectNamedPipe(m_hPipe,NULL)=FALSE)CloseHandle(m_hPipe);m_sMessage=与客户机建立连接失败!;return 0;else m_sMessage=与客户机连接成功!;coutm_sMessageendl;while(true)if(ReadFile(m_hPipe,buffer,sizeof(buffer),&ReadNum,NULL)=FALSE)CloseHandle(m_hPipe);cout读取失败!endl;return 0;elsecout来自客户端的数据为:;bufferReadNum=0;coutbufferendl;cout向客户端回发数据bufferendl;if(WriteFile(m_hPipe,buffer,strlen(buffer),&ReadNum,NULL)=FALSE)cout数据发送失败!endl;elsecout数据发送成功endl;if(DisconnectNamedPipe(m_hPipe)=FALSE)m_sMessage=终止连接失败!;coutm_sMessageendl;elseCloseHandle(m_hPipe);m_sMessage=成功终止连接!;coutm_sMessageendl;return 0;命名管道客户端代码:char message1000 ;DWORD WriteNum;cout命名管道客户端界面nnn;if(WaitNamedPipe(.PipeTest,NMPWAIT_WAIT_FOREVER)=FALSE)cout等待连接失败!endl;return 0;HANDLE hPipe =CreateFile(.PipeTest,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hPipe=INVALID_HANDLE_VALUE)cout管道打开失败!endl;return 0;elsecout成功打开管道endl;cout请输入要写的数据message;if(WriteFile(hPipe,message,strlen(message),&WriteNum,NULL)=FALSE)cout数据写入失败!endl;elsecout数据写入成功endl;cout接收来自服务器的数据endl;if(ReadFile(hPipe,message,sizeof(message),&WriteNum,NULL)=FALSE)CloseHandle(hPipe);cout读取失败!endl;return 0;elsecout来自服务器的数据为:;messageWriteNum=0;coutmessageendl;CloseHandle(hPipe);return 0;邮件槽服务器代码char Display100;HANDLE mySlot;HANDLE Slot;DWORD nextSize;DWORD msg;DWORD NumByteRead;BOOL stat;mySlot= CreateMailslot(.mailSlotmyslot,0,0,NULL);if(mySlot=INVALID_HANDLE_VALUE)cout建立邮槽失败;return(1);while(1)stat=GetMailslotInfo(mySlot,NULL,&nextSize,&msg,NULL);if(!stat)CloseHandle(mySlot);return(1);if(msg)if(!ReadFile(mySlot,Display,nextSize,&NumByteRead,NULL)CloseHandle(mySlot);return(1);cout 服务器界面endl;cout来自客户机端的数据为:n;coutDisplayendl;cout向客户机回发数据Displayendl;Slot =CreateFile(.mailslotslot,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);if(Slot=INVALID_HANDLE_VALUE)cout文件不能打开!;return(1);while(1)stat=WriteFile(Slot,Display,(DWORD)strlen(Display)+1,&NumByteRead,(LPOVERLAPPED)NULL); cout发送成功endl;CloseHandle(Slot);return(1);邮件槽客户端代码:char Sendtext100;DWORD len=100;HANDLE mySlot;HANDLE Slot;DWORD nextSize;DWORD msg;BOOL stat;DWORD NumByteWritten;mySlot =CreateFile(.mailslotmyslot,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);if(mySlot=INVALID_HANDLE_VALUE)cout文件不能打开!;return(1);cout客户机界面endl;while(1)cout请输入要发送的数据Sendtext;stat=WriteFile(mySlot,Sendtext,(DWORD)strlen(Sendtext)+1,&NumByteWritten,(LPOVERLAPPED)NULL);cout向服务器发送成功endl;Slot= CreateMailslot(.mailSlotslot,0,0,NULL);if(Slot=INVALID_HANDLE_VALUE)cout建立邮槽失败;return(1);while(1)stat=GetMailslotInfo(Slot,NULL,&nextSize,&msg,NULL);if(!stat)CloseHandle(Slot);return(1);if(msg)if(!ReadFile(Slot,Sendtext,nextSize,&NumByteWritten,NULL)CloseHandle(Slot);return(1);cout来自服务器端的数据为:n;coutSendtextendl;5程序运行结果及说明:命名管道客户端界面:命名管道服务器界面:邮件槽服务器界面客户机界面6小结邮槽最大的一个缺点便是只允许从客户机到服务器,建立一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 转让股份协议书
- 浙江省嘉兴市2016年教学评比浙教版九年级上科学第三章第四节《简单机械》(第一课时)教学设计
- 大坑租赁协议书
- 自愿离婚协议书的范本
- 房屋拆除协议书
- 二年级道德与法治上册 第三单元 1 我爱秋天 2 果实长大不容易说课稿 浙教版
- 协议书一制性
- 2024年学年八年级语文上册 第三单元 宋词集粹(下)第10课《西江月 阻风山峰下》说课稿 沪教版五四制
- 二手买房协议书
- 柳埠中学八下unit10复习课教学设计
- 语言运用之句子的表达效果
- 前牙黑三角的树脂充填
- 华为质量管理评估模型(31个评估要素和评估报告)
- 储备店长培训工作流程-课件
- 药品效期管理
- 压水堆核电厂二回路系统与设备介绍
- LY/T 1180-2006脲醛预缩液
- GB/T 1554-2009硅晶体完整性化学择优腐蚀检验方法
- 2023年河北景州城乡发展投资集团有限公司招聘笔试模拟试题及答案解析
- bbf-sha系列交流伺服驱动器使用说明书
- 青岛版八年级数学上册2.4.2线段的垂直平分线 教学课件(共12张PPT)
评论
0/150
提交评论