云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 应用程序之间互相通讯的几种方法

应用程序之间互相通讯的几种方法

  • 62 次阅读
  • 3 次下载
  • 2025/6/6 13:20:51

应用程序之间互相通讯的几种方法

应用程序之间的数据交换(互相通讯)一直是困扰广大程序员的难题,尽管已经

出现了各式各样的解决方案,但迄今为止没有哪一种方案是完美无缺的。因此,只有

学习并了解了它们的优缺点后,才能在特定的情况下选择最佳方案,以满足最终的要 求。

1、共享

在硬盘上建立一个文件,一个应用程序往该文件里写数据(可以不关闭文件,但

必须刷新缓冲区),另一个应用程序以共享方式打开这个文件并读取其中的内容,这

便是最简单的一种数据交换方式。对于网络用户而言,只要两台终端上安装的都是

Win311 For Workgroup或Windows 95(或NT),则只要设置一下目录共享,映射成网

络驱动器,同样可以简单地实现数据交换。但它的缺点也是显而易见的:只能采取轮

询的方式获得最新数据(效率低下),网络映射的驱动器绝对不能变动或取消(可靠

性差),所以这是一种“低级”的通讯方式。

2、DDE

每个Windows程序员都不会对DDE(动态数据交换)感到陌生,它是最早的基于

Windows的数据交换方法,有三种方式可供选择:冷连接、温连接和热连接。一般都

是由客户端向服务器端发出连接申请,并且必须指明服务器端的名字和标题。在连接

建立后,数据可以双向流动。典型的例子如抓图软件SnagIt,它提供了DDE接口,能

够让其它应用程序来控制它。DDE是完全向后兼容的,从16位平台转到32位,源代码

几乎不用修改。

DDE还有网络功能。使用过Win311 For Workgroup的人大概都还记得,它自带一

个非常吸引人的小程序“Chat”,能使两台计算机通过网络实时交谈,这在当时几乎

是一项创举。可是很少有人知道“Chat”使用的是一种特殊的DDE,即NetDDE。它的

基本工作原理仍然是DDE,但它能使一台计算机向在同一个网络中的另一台终端发消

息,而不像普通DDE 只能局限在同一台机器上。与其它的数据交换方式相比,DDE已

不够先进,而且Microsoft也不再积极支持DDE,所以它的前景不被看好。 3、WM_COPYDATA

Windows消息WM_COPYDATA功能强大,知之者却甚少。它的确切定义是:一个应用

程序向另一个应用程序传递数据时所发出的消息。众所周知,Windows 在很大程度上

依赖于消息机制,那么我们为什么不把数据放在消息中一起发送出去呢?这样,我们

只要调用SendMessage(),以对方窗体的句柄作为第一个参数,以含有指向实际数

据的指针结构的地址作为第二个参数,就可以把整个数据块当作消息发向另一个应用

程序。也许有的程序员会说,一个自定义的消息同样可以完成这样的工作。他只说对 了一半。自定义消息的确可以发送到其它的应用程序上去,但其原始数据所在的内存

区只有在发送过程中才是合法的,若在其它模块中存取该内存区就会导致“Access Violation”。而使用WM_COPYDATA 则不存在这个问题,因为Windows 本身会替你处

理这一切。深入钻研下去,你会发现它其实是先创建了一个文件映射的对象,将发送

方的原始数据先拷贝至映射文件,然后再在接收方对这个映射文件打开一个“视图”

。WM_COPYDATA 的不足之处在于:必须要有一个窗体来接收消息和数据(缺乏灵活性

),数据在使用之前先得拷贝到一个映射文件(浪费资源)。

4、NetBIOS

从80年代开始,NetBIOS就是开发Client/Server类程序的标准接口。而当时其它

的解决方案几乎都是从UNIX系统上发展而来的。当然,对于今天的用户而言, NetBIOS已不是唯一的选择,他们可以从各种方案中择优选取。在Windows 95和NT平

台上,可以通过API函数Netbios()来调用NetBIOS功能。

NetBIOS兼容以下几种低层协议:NetBEUI协议(NBF)、NWLink

NetBIOS(NWNBlink)、NetBIOS over TCP/IP(NetBT)。NetBIOS的优点是速度较快,缺

点是可靠性较差。

5、标准的Sockets和WinSock

Sockets是15年前在UNIX系统上提出来的,一开始主要是用于本地通讯,但很快

就应用在Client/Server体系上了。它的内核很简单:你可以将一个Socket看作是一

个双向的节点,一个应用程序可以通过它先与另一个程序建立连接(建立在一个双方

都认可的端上,以便于区分同时运行的几个通讯线程),然后就可以彼此交换数据了。

微软公司在其基础上创建了WinSock,专门用于Windows接口,与Socket完全兼容

。近年来基于TCP/IP协议的网络大行其道,Socket也随之获得了更加广泛的应用。

如今,Sockets已在Internet上获得了最广泛的应用,主要是因为它的可移植性好:

Socket应用程序无论在任何平台间都能互相进行通讯(不管是PC机还是 Macintosh,也不管是Windows平台还是UNIX平台)。而最新推出的WinSock 2.0,已不

仅仅只基于TCP/IP协议,还可基于其它几种传输协议(如IPX)。

Socket的缺陷是它工作在通讯的低层,所以实现起来较为复杂(如果是Win 95或

NT平台,则不存在这个问题,微软公司提供了相应的控件)。但是,如果要在多个平

台间互相通讯,则Socket是不二之选。

6、Mailslot和Pipe

Mailslot和Pipe有很多相同点,即都是高层的、基于内存的通讯系统。Mailslot

由Server端创建,代码如下:

myMailslot = CreateMailslot(pSlotName, 0, MAILSLOT_WAIT_FOREVER, NULL);

然后,Client端就可以像打开文件一样打开这个Mailslot,再通过API函数

WriteFile()来将数据写入到消息队列中。

与此相类似,Pipe也是由Server端创建的,代码如下:

pipe = CreateNamedPipe(pPipeName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE |PIPE_READMODE_MESSAGE | PIPE_WAIT,

PIPE_UNLIMITED_INSTANCES, BUFSIZE,BUFSIZE, 20000, NULL);

接着,Client端就可以通过一般的文件API读写数据,代码如下:

pipe = CreateFile(pPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0,NULL);

success = WriteFile(pipe, pMessage, strlen(pMessage) + 1, &bytesWritten, NULL);

Pipe分两种,即命名Pipe和匿名Pipe。匿名Pipe是以句柄而不是以名字来进行标

识的,因而也就限制了它只能在同一台机器上通讯,而不能应用于网络。命名Pipe则

提供了以名字来进行标识,所以能在网络上的其它任何地方打开它。需要注意的是:

命名Pipe只能在 Win NT而不是Win 95上创建(即Server端),Client端则可以是任 意平台。

Pipe既可以单向通讯也可以双向通讯,Mailslot则只能单向通讯。Client端可以

发送消息给mailslot,但不能接收消息;如果你想要接收消息,则只能创建一个新的 mailslot。但mailslot有一个很大的优点:它支持数据广播。也就是说,若Client端

发送一条消息,则整个网络中的同名对象都能收到。这是因为mailslot的名字的作用

域只是在本台机器上,所以可在不同机器上创建同名的mailslot,当Client端发来消

息时则每一台机上的mailslot都得到了该消息的一份拷贝,并在本机上作出相应的反

搜索更多关于: 应用程序之间互相通讯的几种方法 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

应用程序之间互相通讯的几种方法 应用程序之间的数据交换(互相通讯)一直是困扰广大程序员的难题,尽管已经 出现了各式各样的解决方案,但迄今为止没有哪一种方案是完美无缺的。因此,只有 学习并了解了它们的优缺点后,才能在特定的情况下选择最佳方案,以满足最终的要 求。 1、共享 在硬盘上建立一个文件,一个应用程序往该文件里写数据(可以不关闭文件,但 必须刷新缓冲区),另一个应用程序以共享方式打开这个文件并读取其中的内容,这 便是最简单的一种数据交换方式。对于网络用户而言,只要两台终端上安装的都是 Win311 For Workgroup或Windows 95(或NT),则只要设置一下目录共享,映射成网 络驱动器,同样可以简单地实现数据交换。但

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com