
2、高级管道通信:将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程;
3、有名管道通信:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信;
4、消息队列通信:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识;
5、信号量通信:信号量是一个计数器,可以用来控制多个进程对共享资源的访问;
6、信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;
7、共享内存通信:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问;
8、套接字通信:套接口也是一种进程间通信机制。
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都得到了该消息的一份拷贝,并在本机上作出相应的反应。Mailslot的最大缺陷是不可靠,因为它的数据是以数据报格式来传送的,网络错误或负荷过重都会导致数据丢失。 Pipe则较为可靠,但它不能广播。所以,如果你不需要进行广播,则Pipe是更好的选择。选择Mailslot,则要对此后遇到的麻烦有充分的准备。 7、剪贴板(Clipboard) 大家对Windows的剪贴板应该不会感到陌生吧?它的出现就是为了实现应用程序间的互相数据交换。Windows提供了一系列的API函数来让应用程序安全地打开剪贴板,读写其中的数据。 剪贴板的缺陷也是显而易见的:当有新的数据放在剪贴板上时,则先前的数据就会被冲掉,而在Windows中用到剪贴板的时候又实在太多了,所以这种方式用于程序间的通讯显然不够安全。 8、COM和DCOM 公共对象模式(COM)是一种协议,它建立了一个软件模块同另一个软件模块之间的连接,然后将其描述出来。当这种连接建立起来之后,则两个模块之间就可以通过称为“接口”的机制来进行通讯。COM可以用不同的语言(VB、VC、Delphi)进行编制,又能被其它语言编写的程序所使用,并且不用管通讯双方实际所处的位置(是在同一台机上,还是在同一个网络上的不同机上)。事实上,Internet上有大量的COM控件可供人们下载使用,其中有相当一部分就是用于应用程序间的相互通讯(甚至是Internet程序间的通讯),硬盘上能够看到的大量的.ocx文件其实就是一种COM。 COM对象为外部调用提供了一个标准的界面,COM Client通过创建COM Server的一个实例获得指针,转向所需的函数定义处并执行相应的程序。讲得通俗一点,也就是先正确定义好COM对象的属性(Property),再执行相应的方法(Method)。 DCOM(分布式公共对象模式)是COM在网络上的一种扩展,它通过把分布式对象间的通讯变成一个实体来实现通讯。 COM如今被微软公司大力提倡,最著名的有OLE、ActiveX、DirectX和Win95、WinNT的外壳。由于微软公司目前在软件业处于霸主地位,所以COM很有可能成为将来的业界标准,其前途也较为看好。但COM的庞大也会使一些经验丰富的程序员望而却步,他们宁可自己多写一些代码以使整个程序更为简洁、有效而不愿使用COM。 以上介绍的只是现今流行的一些通讯方法,它们各有各的优缺点,没有哪一种是万能的。因此,只有在合适的场合采用合适的方案,才是最好的解决办法。客户服务器方式和对等方式
这里所说的“主机A和主机B进行通信”,实际上是指:“运行在主机A上的某个程序和运行在主机B上的另一个程序进行通信”。 客户服务器方式在因特网上是最常用的,也是最传统的方式。客户服务器模式是一种分布式系统体系结构。我们在上网发邮件或在网站上查找资料时,都会使用客户服务器方式(有时也写为客户-服务器方式或客户/服务器方式)。当打电话时,电话振铃声使被叫用户知道有一个电话呼叫。计算机通信的对象是应用层中的应用程序,显然不能用响铃的办法来通知所要找的对方的应用进程。然而采用客户服务器方式可以使两个应用程序能够进行通信。客户(client)和服务器(server)都是指通信中所涉及的两个应用程序。客户服务器方式描述的是进程之间服务和被服务的关系。这里所说的客户和服务器都指的是计算机进程(软件)。在C/S方式中,请求一方为客户,响应请求一方称为服务器,如果一个服务器在响应客户请求时不能单独完成任务,还可能向其他服务器发出请求,这时,发出请求的服务器就成为另一个服务器的客户。从双方建立联系的方式来看,主动启动通信的应用叫客户,被动等待通信的应用叫服务器。这里最主要的特征就是:客户是服务请求方,服务器是服务提方。客户与服务器的通信关系建立后,通信可以是双向的,客户和服务器都可以发送和接收数据。 对等连接(peer-to-peer,简写为P2P)是指两个端系统在通信时并不区分哪一个是服务请求方式还是服务提供方式。只要两个主机都运行了对等连接软件(P2P软件),它们就可以进行平等的、对等连接通信。这时,双方都可以下载对方已经存储在硬盘中的共享文档。因此这种工作方式也称为P2P文件共享。如图中,主机C,D,E和F都运行了P2P软件,因此这几个主机都可以进行对等通信(如C何D,E和F,以及C和F)。实际上,对等连接方式从本质上看仍然是使用客户服务器方式,只是对等连接中的每一个主机既是客户又同时是服务器。例如主机C,当C请求D的服务时,C是客户,D是服务器。但如果C又同时向F提供服务,那么C又同时起着服务器的作用。对等连接工作方式可支持大量对等用户(如上百万个)同时工作。
抢首赞
评论
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)