网站大量收购独家精品文档,联系QQ:2885784924

一种网络进程间通信的方式—— 管道.doc

一种网络进程间通信的方式—— 管道.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一种网络进程间通信的方式—— 管道

一种网络进程间通信的方式—— 管道摘 要: 文章主要介绍了计算机网络进程间通信的必要性以及进程间通信所采用的几种方式,重点说明了管道通信的原理及命名管道的实现方法。 关键词: 管道 命名管道 进程一、概述   进程间通信的主要目的是实现同一计算机系统内部相互协作的进程之间的数据共享与信息交换。由于这些进程处于同一应用软件和硬件环境下,因而利用操作系统提供的编程接口,用户可以方便地在程序中实现这种通信。而应用程序间通信的主要目的是实现不同计算机系统中相互协作的应用程序之间的数据共享与信息交换。由于应用程序分别运行在不同计算机系统中,所以它们之间要通过网络间的协议才能实现数据共享与信息交换。进程间的通信和应用程序间的通信,以及它们相应的实现技术既有许多相同之处,也有各自的特点,因为即使是同一类型的通信也会有多种实现的方法,以适应不同情况的需要。   二、 进程间通信的必要性   用户提交给计算机的任务最终都是通过一个个进程来完成的。在一组并发进程中的任何两个进程之间,如果都不存在公共变量,则称该组进程为不相交的。在不相交的进程组中,每个进程都独立于其它进程,它的运行环境与顺序程序一样,而且也不为别的进程所改变,其运行的结果是确定的,不会发生与时间相关的错误。   但是,在实际中,并发进程的各个进程之间并不是完全互相独立的,它们之间往往存在着相互制约的关系。进程之间的相互制约关系表现为以下两种方式:   ●  间接相互制约 指共享CPU方式;   ●  直接相互制约 指竞争和协作方式。   其中,竞争指进程对共享资源的竞争。为保证进程互斥地访问共享资源,各进程必须互斥地进入各自的临界段。 协作指进程之间交换数据。为完成一个共同任务而同时运行的一组进程称为同组进程,它们之间必须交换数据,以达到协作完成任务的目的。   共享CPU问题由操作系统的进程调度来解决,进程间的竞争和协作由进程间的通信来完成。   Win32下提供的进程间通信方式有:剪贴板、COM/DCOM、DDE、文件映射、邮件槽、管道、远地过程调用、网络套接字和消息。   三、无名管道和命名管道   无名管道实际上是内存中的一个临时存储区,它由系统安全控制,并且独立于创建它的进程的内存区。管道对数据采用先进先出方式管理,并严格按顺序操作,如不能对管道进行搜索,管道中的信息只能读一次。   无名管道只能用于两个相互协作的进程之间的通信,并且访问无名管道的进程必须有共同的祖先。   命名管道的操作与无名管道类似,不同的地方在于使用有名管道的进程不需要具有共同的祖先,其它进程,只要知道该管道的名字,就可以访问它。管道非常适合进程之间快速交换信息。   四、命名管道的连接和通讯方式   在服务器端第一次创建命名管道后等待连接,当客户端连接成功后服务器端的命名管道就用作通讯用途。如果需要再次等待连接,服务器端就需要再次打开命名管道(创建一个命名管道的实例)并等待连接。   对于客户端每次打开命名管道后可建立与服务器间的连接,然后就可以利用命名管道进行通信,如果需要建立第二个连接,则需要再次打开管道并再次建立连接。   创建命名管道时需要指定一个主机名和管道名,客户端可以采用以下格式完成:   \\[host_name]\pipe\[pipe_name]\;也可以是:   \\.\pipe\pipe_name\(其中:. 表示本机)。   而服务器端只能够以指定本机作为主机名,即只能使用 \\.\ pipe_name\格式。此外,需要注意的是:在同一主机上的管道名称是唯一的,一个命名管道一旦被创建,就不允许再创建相同名称的管道。   服务器方通过下列方式创建命名管道和打开已经存在的命名管道:   HANDLE CreateNamedPipe(    LPCTSTR lpName, //管道    DWORD dwOpenMode, // 打开方式    DWORD dwPipeMode, // 管道类型    DWORD nMaxInstances, // 管道的最大数量    DWORD nOutBufferSize, // 写缓冲区大小    DWORD nInBufferSize, // 读缓冲区大小    DWORD nDefaultTimeOut, // 最长的等待时间    LPSECURITY_ATTRIBUTES lpSecurityAttributes // 安全属性   );   其中,lpName为管道名称,dwOpenMode为创建方式,可以是下面值的组合:   PIPE_ACCESS_INBOUND:管道只能用作接收数据。   PIPE-ACCESS-OUTBOUND:管道只能用作发送数据。   PIPE-ACCESS-DUP

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档