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

合集下载

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

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

应用程序之间互相通讯的几种方法应用程序之间的数据交换(互相通讯)一直是困扰广大程序员的难题,尽管已经出现了各式各样的解决方案,但迄今为止没有哪一种方案是完美无缺的。

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

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,所以它的前景不被看好。

什么是网络协议

什么是网络协议

什么是网络协议篇一:几种常用的网络协议几种常用的网络协议几种常用的网络协议一、OSI模型名称层次功能物理层 1实现计算机系统与网络间的物理连接数据链路层2进行数据打包与解包,形成信息帧网络层 3提供数据通过的路由传输层 4提供传输顺序信息与响应会话层 5建立和中止连接表示层 6数据转换、确认数据格式应用层 7提供用户程序接口二、协议层次网络中常用协议以及层次关系1、进程/应用程的协议平时最广泛的协议,这一层的每个协议都由客程序和服务程序两部分组成。

程序通过服务器与客户机交互来工作。

常见协议有:Telnet、FTP、SMTP、HTTP、DNS等。

2、主机—主机层协议建立并且维护连接,用于保证主机间数据传输的安全性。

这一层主要有两个协议: TCP(Transmission Control Protocol:传输控制协议;面向连接,可靠传输 UDP(User Datagram Protocol):用户数据报协议;面向无连接,不可靠传输3、 Internet层协议负责数据的传输,在不同网络和系统间寻找路由,分段和重组数据报文,另外还有设备寻址。

些层包括如下协议:IP(Internet Protocol):Internet协议,负责TCP/IP主机间提供数据报服务,进行数据封装并产生协议头,TCP与UDP协议的基础。

ICMP(Internet Control Message Protocol):Internet控制报文协议。

ICMP协议其实是IP协议的的附属协议,IP协议用它来与其它主机或路由器交换错误报文和其它的一些网络情况,在ICMP包中携带了控制信息和故障恢复信息。

ARP(Address Resolution Protocol)协议:地址解析协议。

RARP(Reverse Address Resolution Protocol):逆向地址解析协议。

OSI 全称(Open System Interconnection)网络的OSI七层结构20xx年03月28日星期五 14:18(1)物理层——Physical这是整个OSI参考模型的最低层,它的任务就是提供网络的物理连接。

WINCC和与PLC之间的通讯方式

WINCC和与PLC之间的通讯方式

第四章S7-400与WINCC通讯连接技术本章讲述WINCC与可编程控制器间的通讯方式。

WINCC是目前工业现场应用较为广泛的可视化软件技术,能实现工业现场的模拟画面,使现场设备除了提供专用的通道,用于连接到SIMATIC 55/57/5505等系列的PLC外,还提供了如PROFIBUS DP/FMS,DDE(动态数据交换)和OPC(用于过程控制的OLE)等通用通道连接到第三方控制器。

此外,WINCC还以附加件(add-ons)的形式提供连接到其他控制器的通讯通道。

另外,还提供了一个CDK选件,可以用它来开发一些专用通讯通道。

过程通讯原理4.1.1通讯术语下面列举了一些在通讯中应用的术语。

其中有关各种通讯网络的详细介绍已经在上章里详细介绍过,对于WINCC与PLC之间的通讯连接方式的掌握,熟悉下面几种通讯术语,能更好的加深对本章的了解和应用。

(1)通讯通讯用于描述两个通讯伙伴之间的数据交换。

(2)通讯伙伴通讯伙伴是指可以互相进行通讯的模块,也就是说它们可以互相交换数据。

它们可以是PLC中的中央处理器板和通讯处理器,也可以是PC中的通讯处理器。

(3)站站是可以作为一个单元与一个或多个子网连接的设备。

它可以是PLC,也可以是PC。

(4)子网、子网是用于描述一个通讯单元的术语。

该单元包含建立链接所必需的所有物理组件以及相关的数据交换方式。

(5)网络网络是由一个或多个互相连接的子网组成的单元,它包括所有可以互相通讯的站。

(6)通讯驱动程序在WINCC中通讯驱动程序也指通道。

它是一个软件组织,可在自动化系统和WINCC中的变量管理器之间设置连接,以便能向WINCC变量提供过程值。

在WINCC中有很多通讯驱动程序,可通过不同的总线系统连接不同的自动化系统。

每个通讯驱动程序只需被集成到WINCC 项目一次。

通讯驱动程序具有扩展名.chn,安装在系统中所有的通讯驱动程序可在WINCC安装目录下的子目录、bIN中查到。

即时通信系统

即时通信系统

本科生课程设计即时通信系统院系计算机科学与技术学院专业计算机科学与技术班级学号学生姓名指导教师职称讲师2011年12月独创性声明本人郑重声明:所呈交的课程设计论文(设计)是本人在指导老师指导下取得的研究成果。

除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。

与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。

签名:年月日授权声明本人完全了解许昌学院有关保留、使用本科生课程设计论文(设计)的规定,即:有权保留并向国家有关部门或机构送交课程设计论文(设计)的复印件和磁盘,允许课程设计论文(设计)被查阅和借阅。

本人授权许昌学院可以将课程设计论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。

本人论文(设计)中有原创性数据需要保密的部分为:。

签名:年月日指导教师签名:年月日摘要本文介绍了即时通信系统的程序设计和功能实现。

该系统主要是基于TCP与UDP的C/S 模式通信系统。

该项目由两个主程序组成:服务器端应用程序,客户机端应用程序。

服务器启动监听进程,监听连接申请,对于来申请的客户机,或者说申请的ID,服务器进程将会对进行判别和分类,满足服务器要求就进行连接,从而实现客户端的通信。

该系统界面友好,操作简单,适应性强,扩展性强。

关键字:即时通信;服务器;客户端;ABSTRACTThis paper introduces the Instant Messaging systems program design and function realization. The system is mainly based on TCP and UDP C/S mode communication system. The project consists of two main program composition: the server application, the client application. Monitor process server startup, monitor connection application, to apply for the client, or apply for ID, the server process will be to discrimination and classification, and satisfy the requirements will connect server, so as to realize the client communication. The system friendly interface, simple operation, strong adaptability and expandability.Key word: Instant Messaging ;The server. The client;目录目录 (4)第1章引言 (6)1.1 概述 (6)1.2 研究背景 (6)1.3 系统简介 (6)1.4系统开发方法 (6)第2章系统分析 (7)2.1 可行性分析 (7)2.2 功能分析 (7)第3章系统设计与实现 (9)3.1 项目系统模型 (9)3.2 开发及运行环境 (9)3.3 系统结构设计 (9)3.4 系统功能设计 (10)3.5 服务器端应用程序 (12)3.5.1 服务器端应用程序的创建流程 (12)3.5.2 实现界面设计 (12)3.5.3 定义类设计 (13)3.5.4 实现类中的函数 (15)3.5.5实现界面功能按钮 (22)3.5.6 测试 (23)3.6 客户端应用程序 (23)3.6.1界面设计 (23)3.6.2控件的编辑与绑定 (24)3.6.3 定义类设计和实现类设计中的函数 (24)3.6.4 实现界面功能按钮 (25)3.6.5 测试 (25)第4章系统结构 (27)4.1 服务器端结构 (27)4.2 客户端结构 (27)第5章系统评价 (29)结束语 (30)致谢 (31)附录参考文献 (32)第1章引言1.1 概述即时通信(Instant Messaging)是基于互联网协议的应用程序,它能够使应用不同类型设备的用户一对一进行通信。

软件系统之间的接口方式

软件系统之间的接口方式

软件系统之间的接口方式•概述软件接口是实现一个系统跟另外系统进行信息交互的桥梁,在不同的系统之间,根据系统的关联程度的不同存在紧耦合和松耦合两种:紧耦合要求接口响应反应快,消息不能阻塞;松耦合对响应反应要求比较低。

在目前应用中, Socket 、消息队列(Message Queue)、 WebService等都有相应的应用,但是应用中发现各通讯方式有自己固有的特征,“适合的才是最好的”,这是真理。

在接口和系统信息交互的过程中,两种模式使用得很普遍:同步调用和异步调用,同步调用要求接口发出请求消息后必须等待服务端系统的应答消息,接口阻塞直至超时;异步调用则发出请求消息后,接口可以从事其它处理,定时轮询服务端应答消息和消息或事件通知。

同步方式简单,但是很容易造成接口阻塞,造成消息积压超时。

•技术实现• Socket 通讯Socket 通讯相对来说是很古老的通讯方式,也是最常用的通讯方式。

Socket 通讯有阻塞和非阻塞两种方式。

在同步方式,采用阻塞编程比较简单,但是为了防止接口阻塞,我们需要设置 Socket 超时,因此可以使用 Socket 的 SELECT 模型(参考如下示例代码):ReceLen=0;CurReceLen=0;for(;;){iResult=select(0,&fdread,NULL,NULL,&timeout);if(iResult==0){AfxMessageBox("接收应答消息超时!!!",MB_OK|MB_ICONERROR); closesocket(Socket);return FALSE;}CurReceLen = recv(Socket, oBuf+ReceLen, len, NO_FLAG_SET); if((CurReceLen>0) && (CurReceLen != SOCKET_ERROR)){oBuf[ReceLen+CurReceLen]='\0';memcpy((char *)&MsgLen,oBuf,sizeof(WORD32));MsgLen=ntohl(MsgLen);if(ReceLen+CurReceLen==MsgLen){ReceLen+=CurReceLen;break;}ReceLen+=CurReceLen;}}在异步方式下,采用非阻塞方式实现比较方便,在非阻塞方式下可使用WSAAsyncSelect模型和 WSAEventSelect 模型: WSAAsyncSelect模型基于消息,WSAEventSelect 模型基于事件,下面的示例代码设置了 Socket 进行读写和关闭操作的消息:status = WSAAsyncSelect(TempSocket, hWnd, WSA_READ, FD_READ | FD_CLOSE | FD_WRITE);if (status == SOCKET_ERROR){WriteLogFile("Set stream socket module fail!!!IP(%s),Port(%d) and error(%d)",GetIPAddr((PeerMap+node)->IPAddr),(PeerMap+node)->PeerPortNo,WS AGetLastError());CloseSocket(TempSocket,__LINE__,__FILE__);return FALSE;}无论使用阻塞方式或非阻塞方式编程,需要重点考虑的一个问题:粘包现象,即应用发送两个或以上的数据包,在 Socket 通讯层将数据包合并成一个发送出去,因此接收端收到数据包以后需要对数据包根据应用定义的长度进行拆分,否则导致应用层丢包。

(最新整理)信息系统分析与设计课后题答案

(最新整理)信息系统分析与设计课后题答案

(完整)信息系统分析与设计课后题答案编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)信息系统分析与设计课后题答案)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)信息系统分析与设计课后题答案的全部内容。

第一章信息系统导论一、名词解释1.信息:信息是经过加工后的数据,它对接收者的决策或行为具有现实或潜在的价值.2.系统:系统是由处于一定环境中的若干相互联系和相互作用的要素组成并为达到整体目的而存在的集合。

3.信息系统:信息系统是指利用计算机、网络、数据库等现代信息技术,处理组织中的数据业务、管理和决策问题并为组织目标服务的综合系统。

4.决策支持系统:这是在现代信息技术的基础上,交叉管理学、行为科学、运筹学,控制论等学科运用、人工智能、专家系统、知识工程等理论和方法,辅助支持企业,决策活动的信息系统。

二、选择题1.信息运动的基本形式是(D)A.信息输入与输出 B信息处理 C信息控制 D信息循环2.决策的基础(C)A管理者 B客户 C 信息 D规章制度3.下列是分布式系统缺点是(D)A难于发挥用户的积极性和创造性 B应变能力差C系统难于扩展 D安全控制难度大4.集中式系统的缺点是(C)A不利于安全控制 B应变能力差C不利于调动各部门的积极性 D不利于人员素质的提高5.以下不是B/S结构特点的是(B)A 客户端统一 B速度快C开放性强 D 易于管理和维护6.系统通过与环境进行物质、能量和信息的交换,从而调节自身的行为,达到与环境平衡和适应,这是指系统的(A)A 动态性B 目的性C 整体性D 相关性三、简答题1.简述信息与数据的区别.答:信息是经过加工后的数据,它对于接收者的决策或行为具有现实或潜在意义。

C++进程间通信的十一种方法

C++进程间通信的十一种方法

C++进程间通信的⼗⼀种⽅法⼀个是操作系统⽤来管理进程的内核对象。

内核对象也是系统⽤来存放关于进程的统计信息的地⽅另⼀个是地址空间,它包含所有的可执⾏模块或DLL模块的代码和数据。

它还包含动态分配的空间。

如线程堆栈和堆分配空间。

每个进程被赋予它⾃⼰的虚拟地址空间,当进程中的⼀个线程正在运⾏时,该线程可以访问只属于它的进程的内存。

属于其它进程的内存则是隐藏的,并不能被正在运⾏的线程访问。

为了能在两个进程之间进⾏通讯,由以下⼏种⽅法可供参考:1、剪贴板Clipboard: 在16位时代常使⽤的⽅式,CWnd中提供⽀持2、窗⼝消息标准的Windows消息以及专⽤的WM_COPYDATA消息 SENDMESSAGE()接收端必须有⼀个窗⼝3、使⽤共享内存⽅式(Shared Memory)a.设定⼀块共享内存区域HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)产⽣⼀个file-mapping核⼼对象LPVOID MapViewOfFile(HANDLE hFileMappingObject,DWORD dwDesiredAcess,DWORD dwFileOffsetHigh,DWORD dwFileOffsetLow,DWORD dwNumberOfBytesToMap);得到共享内存的指针b.找出共享内存决定这块内存要以点对点(peer to peer)的形式呈现每个进程都必须有相同的能⼒,产⽣共享内存并将它初始化。

每个进程都应该调⽤CreateFileMapping(),然后调⽤GetLastError().如果传回的错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这⼀共享内存区域已经被别的进程打开并初始化了,否则该进程就可以合理的认为⾃⼰排在第⼀位,并接下来将共享内存初始化。

EAI简介

EAI简介

EAI简介企业应用集成技术,即EAI (Enterprise Application Integration)技术,EAI是将基于各种不同平台、用不同方案建立的异构应用集成的一种方法和技术,通过它可以达到资源共享。

什么时候用:一般来讲,如果某一应用领域中的业务逻辑有一定的复杂性,不能单靠简单传统的用户界面加数据库技术解决其业务问题,那么在这个应用领域中,就有可能应用EAI技术。

EAI技术旨在整合既已封装的企业应用,通过一定的业务流程,来实现靠单个应用所不能完成的业务功能。

应用领域:已在各行各业中得到广泛的应用,如电信,金融,媒体,制造业等。

EAI在征管系统中的作用它在征管系统主要是为外围系统提供服务,为了保证征管系统的安全、有效、可靠的运行,同时还要为外围系统提供数据查询等服务,实现与外界资源达到数据共享。

EAI都应用到哪些技术1.HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它的工作原理是通过xml配置文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

2. StrutsStruts是一个基于Sun J2EE平台的MVC框架,它是使用servlet 和JavaServer Pages 技术的一种Model-V iew-Controller 实现。

由于Struts能充分满足应用开发的需求,简单易用。

Struts把Servlet、JSP、自定义标签(taglib)和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

应用程序之间互相通讯的几种方法应用程序之间的数据交换(互相通讯)一直是困扰广大程序员的难题,尽管已经出现了各式各样的解决方案,但迄今为止没有哪一种方案是完美无缺的。

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

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_COPYDATAWindows消息WM_COPYDATA功能强大,知之者却甚少。

它的确切定义是:一个应用程序向另一个应用程序传递数据时所发出的消息。

众所周知,Windows 在很大程度上依赖于消息机制,那么我们为什么不把数据放在消息中一起发送出去呢?这样,我们只要调用SendMessage(),以对方窗体的句柄作为第一个参数,以含有指向实际数据的指针结构的地址作为第二个参数,就可以把整个数据块当作消息发向另一个应用程序。

也许有的程序员会说,一个自定义的消息同样可以完成这样的工作。

他只说对了一半。

自定义消息的确可以发送到其它的应用程序上去,但其原始数据所在的内存区只有在发送过程中才是合法的,若在其它模块中存取该内存区就会导致“AccessViola tion”。

而使用WM_COPYDATA 则不存在这个问题,因为Windows 本身会替你处理这一切。

深入钻研下去,你会发现它其实是先创建了一个文件映射的对象,将发送方的原始数据先拷贝至映射文件,然后再在接收方对这个映射文件打开一个“视图”。

WM_COPYDATA 的不足之处在于:必须要有一个窗体来接收消息和数据(缺乏灵活性),数据在使用之前先得拷贝到一个映射文件(浪费资源)。

4、NetBIOS从80年代开始,NetBIOS就是开发Client/Server类程序的标准接口。

而当时其它的解决方案几乎都是从UNIX系统上发展而来的。

当然,对于今天的用户而言,NetBIOS已不是唯一的选择,他们可以从各种方案中择优选取。

在Windows 95和NT平台上,可以通过API函数Netbios()来调用NetBIOS功能。

NetBIOS兼容以下几种低层协议:NetBEUI协议(NBF)、NWLinkNetBIOS(NWNBlink)、NetBIOS over TCP/IP(NetBT)。

NetBIOS的优点是速度较快,缺点是可靠性较差。

5、标准的Sockets和WinSockSockets是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和PipeMailslot和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都得到了该消息的一份拷贝,并在本机上作出相应的反应。

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。

以上介绍的只是现今流行的一些通讯方法,它们各有各的优缺点,没有哪一种是万能的。

因此,只有在合适的场合采用合适的方案,才是最好的解决办法。

相关文档
最新文档