- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用MailSlot实现网络通信 yzhshi(yzhshi@etangcom) 2003092
利用MailSlot实现网络通信
yzhshi(yzhshi@) 2003.09.21
关键字:邮槽、MailSlot、Net Send
在Windows环境下,实现进程间的通信方式很多,如消息、命名管道(Name Pipes)、剪贴板(ClipBoard)等,邮槽(MailSlot)也是其中一种,这里简单的讨论一下邮槽的原理以及如何在Delphi中实现。
对于邮槽,我们并不陌生,在Windows 95/98下,使用Winpopup可以在不同计算机间进行通信,在Windows NT/2000/XP下,可以使用 Net Send或者使用微软控制台(MMC 即Microsoft Management Console)发送控制台消息。这就是邮槽的简单应用。
那么,邮槽是什么呢?邮槽是由系统来维护的一个虚拟档案,可以形象的理解为一个支持路径和文件名的虚拟文件系统。
利用邮槽的实现通信原理是什么呢?其实很简单,如果将邮槽理解为文件系统,那么其实就是创建文件、写入文件和读取文件的关系。
两台计算机使用邮槽通信,其实就是目的计算机在自己计算机上创建一个文件供写入,当其他计算机(或进程)需要给它发送消息时,就是打开这个文件,将内容写入。当目的计算机进程发现文件内容非空,就读取文件进行分析显示。
好了,弄清楚了这些,现在问题就很简单了。我们需要知道的就是:
a、如何给邮槽文件命名;
b、写入内容的格式;
c、如何创建邮槽文件;
d、如何向邮槽文件中写入内容;
e、如何从邮槽的文件中读取内容。
下面我们就一一来剖析
a、邮槽的文件名。对于邮槽文件,格式为\\ComputerName\mailslot\[path]name
对于本地邮槽文件,ComputerName使用“.”来代替,就是“\\.\MailSlot\路径\文件名”
对于写入的目标计算机的邮槽文件,就是\\目标计算机\MailSlot\路径\文件名
邮槽支持群发,如果向默认工作组/域发送(就是当前发送计算机所在工作组/域),可以使用\\*\MailSlot\路径\文件名。如果向指定工作组/域发送,可以使用\\工作组/域名\MailSlot\路径\文件名
对于Windows的信使服务,使用的邮槽文件是\\.\MailSlot\ messngr,当然我们可以任意起名,如:\\.\MailSlot\Delphi\Delphibbs,但是自定义的名称,使用Windows的信使就不能接收到了,必须得自己写程序进行接收。
b、邮槽文件的内容。我们接收到的消息类似下面的。
在 2003-9-21 16:00:00 从yzhshi到Server的消息
Hello World!
包含:接收日期、发送人、接收人、具体内容。在一条具体的消息中,包含发送人、接收人、具体内容三项内容,中间使用#0间隔。
c、创建文件。
function CreateMailslot(lpName: PChar; nMaxMessageSize: DWORD;
lReadTimeout: DWORD; lpSecurityAttributes: PSecurityAttributes): THandle; stdcall;
d、向邮槽写入内容。
这个和读写普通文件一样,使用CreateFile打开文件,使用WriteFile将文件内容写入。
function CreateFile(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle): THandle; stdcall;
function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
e、读取邮槽内容
在读取邮槽内容以前,可以使用GetMailSlotInfo来判断邮槽内是否有内容,当发现有内容的时候,可以使用ReadFile来进行读取。
function GetMailslotInfo(hMailslot: THandle; lpMaxMessageSize: Pointer;
var lpNextSize: DWORD; lpMessageCount, lpReadTimeout: Pointer): BOOL; stdc
您可能关注的文档
最近下载
- 2025甘肃甘南州专业化管理的村党组织书记招聘45人笔试备考题库及一套答案详解.docx VIP
- 05G525_吊车轨道联结及车挡 .docx VIP
- 《交流电机的维护与检修》课件.ppt VIP
- 妇产科学教学课件:女性生殖系统生理.ppt VIP
- (通用)大学生人文知识竞赛题库及答案(通用版).pptx VIP
- DB42╱T 1528.1-2019 湖北省农业用水定额 第1部分:农田灌溉用水定额.docx VIP
- 财务风险管理及防范对策研究.pptx VIP
- 儿童特应性皮炎的药物治疗.pptx
- 一种在无有机模板剂条件下合成MCM-49型沸石分子筛的方法.pdf VIP
- 三相异步电动机的铭牌.pptx VIP
文档评论(0)