利用MailSlot实现网络通信 yzhshi(yzhshi@etangcom) 2003092.DOCVIP

利用MailSlot实现网络通信 yzhshi(yzhshi@etangcom) 2003092.DOC

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

2105194781 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档