- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
命名管道与邮件槽机制的比较
二,邮件槽与命名管道对比试验
1实验内容
编写程序,要求在客户端的命令行输入字符串并回车客户端把字符串发送到服务器,服务器再把收到的字符串传回客户端,通过命名管道及邮件槽方式完成,分析两种方式的利弊。
2试验目的
深入理解共享存储与消息传递的进程通信。
3试验原理
命名管道 命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是:命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。命名管道提供了相对简单的编程接口,使通过网络传输数据并不比同一计算机上两进程之间通信更困难,不过如果要同时和多个进程通信它就力不从心了。
邮件槽 邮件槽(Mailslots)提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。
通过邮件槽可以给本地计算机上的邮件槽、其它计算机上的邮件槽或指定网络区域中所有计算机上有同样名字的邮件槽发送消息。广播通信的消息长度不能超过400字节,非广播消息的长度则受邮件槽服务器指定的最大消息长度的限制。邮件槽与命名管道相似,不过它传输数据是通过不可靠的数据报(如TCP/IP协议中的UDP包)完成的,一旦网络发生错误则无法保证消息正确地接收,而命名管道传输数据则是建立在可靠连接基础上的。不过邮件槽有简化的编程接口和给指定网络区域内的所有计算机广播消息的能力,所以邮件槽不失为应用程序发送和接收消息的另一种选择。
传输安全性:
由于邮槽是围绕一个广播通信体系设计出来的,所以当然不能指望能通过它实现数据的可
靠传输;
优缺点:
邮槽最大的一个缺点便是只允许从客户机到服务器,建立一种不可靠的单向数据通信。
而另一方面,邮槽最大的一个优点在于,它们使客户机应用能够非常容易地将广播消息发
给一个或多个服务器应用。
4程序源代码
命名管道服务器代码:
{
string m_sMessage;
char buffer[1024];
DWORD ReadNum;
HANDLE m_hPipe = CreateNamedPipe(\\\\.\\Pipe\\Test,PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,1,0,0,1000,NULL);
cout~命名管道服务器界面~\n\n\n;
if(m_hPipe==INVALID_HANDLE_VALUE)
{
m_sMessage=创建命名管道失败!;
coutm_sMessageendl;
return 0;
}
else
{
m_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;
}
else
{
cout来自客户端的数据为:;
buffer[ReadNum]=\0;
coutbufferendl;
cout向客户端回发数据bufferendl;
if(WriteFile(m_hPipe,buffer,strlen(buffer),ReadNum,NULL)==FALSE)
{
cout数据发送失败!endl;
}
else
{
cout数据发送成功endl;
}
}
}
}
if(DisconnectNamedPipe(m_hPipe)==FALSE)
{
m_sMessage=终止连接失败!;
coutm_sMessageendl;
}
else
{
CloseHandle(m
您可能关注的文档
最近下载
- 肝癌教学演示课件.pptx VIP
- 4.《水利工程设计变更管理暂行办法》(水规计〔2012〕93号).pdf VIP
- 2银保监会银行业金融机构监管数据标准化规范(2021版)数据结构一览表.xls VIP
- 课件:第一章 导论(《现代社会福利思想》课程).pdf VIP
- 地产返租协议书范本.docx VIP
- CJJT 281-2018桥梁悬臂浇筑施工技术标准.doc VIP
- 2025年中级(四级)设备点检员职业技能鉴定《理论知识》真题卷(后附答案及解析).docx VIP
- 中医治未病技术操作规范(穴位贴敷) .pdf VIP
- 《生态环境:保护》课件.ppt VIP
- Simcenter 3D电子行业推广策略.pptx VIP
文档评论(0)