用Delphi 5.0实现网络通信
点击次数:66 次 发布日期:2008-11-09 08:39:14 作者:源代码网
|
源代码网推荐 源代码网推荐 Delphi是一种面向对象的可视化应用程序开发工具。Delphi 5.0中包含了一组Internet组件,用于创建Client/Server应用程序,实现基于Windows Socket(简称WinSock)的编程,访问HTTP、UDP、FTP、SMTP、POP3和NNTP等服务。 源代码网推荐 Delphi 5.0通过Windows提供的Socket进行消息传递,但它不需要直接与WinSock的API打交道,因为通信组件已经封装了WinSock的大部分API,使得对WinSock的访问大为简化。WinSock定义了一个基于Microsoft Windows环境的网络编程接口,应用程序开发商可以在此平台上编制通用的网络软件。WinSock还提供了对应用程序之间服务质量的控制,可以通过协商来建立所需的连接质量。 源代码网推荐 网络通信组件 源代码网推荐 网络通信组件一般是基于TCP/IP协议基础上,人们可以利用这些组件设计基于Client/Server模式的应用程序。通常,用于通信的组件总是成对的,如ClientSocket和ServerSocket、NMMsg和NMMSGServ等。 源代码网推荐 NMMsg和NMMSGServ组件主要用于通过Internet或Intranet发送简单的ASCII码文本消息,它们必须成对使用。当通信的双方只需要传送简单的消息而不需要进行大量数据的传送或复杂的交互通信时,使用NMMsg和NMMSGServ非常方便。发送消息时,使用NMMsg组件,接收其他计算机发来的消息时,则使用NMMSGServ组件。 软件开发网 www.mscto.com 源代码网推荐 1.NMMsg组件的属性 源代码网推荐 From Name:发送消息的计算机名称; 源代码网推荐 Host:目的地的计算机名称,或主机名或IP地址; 源代码网推荐 LocalIP:本地计算机的IP地址; 源代码网推荐 Port:在消息传递之前必须先连接该端口,缺省值是6711; 源代码网推荐 ReportLevel:该属性指定在消息传递时“Status”属性和OnStatus事件返回内容的详细级别; 源代码网推荐 Status:只读属性,返回在OnStatus事件中消息通过时的最后状态消息; 源代码网推荐 TimeOut:指定等待响应的时间,单位是毫秒; 源代码网推荐 WSAInfo:只读属性,返回当前使用的WinSock版本号和销售商。 源代码网推荐 属性设置好后,可通过调用NMMsg组件的方法来实现消息的发送。Abort方法可以放弃正在操作的消息传送,并断开客户机与服务器的连接。Create方法为NMMsg创建一个实例。 源代码网推荐 2.NMMsg组件的事件 源代码网推荐 OnConnect:该事件在客户机与服务器连接成功时被调用; 源代码网推荐 OnConnectFailed:该事件在客户机与服务器连接失败时被调用; 源代码网推荐 OnDisconnect:该事件在客户机断开与服务器的连接时被调用; 源代码网推荐 OnHostResolved:找到远程主机的IP地址时,调用该事件,如果远程主机非法,则调用OnInvalidHost事件; 源代码网推荐 OnMessageSent:当一个消息成功地传送到远程主机时,该事件被调用; 源代码网推荐 OnStatus:每次从服务器传来消息时,该事件被激活,传来的内容包含在Status字符串中,同时,Status属性的值也被更新。 源代码网推荐 NMMSGServ组件的设置与NMMsg组件的类似,不再赘述。 源代码网推荐 应用实例 源代码网推荐 笔者参加某国际机场航班消息管理系统的开发时,负责其中的“航班消息指挥系统”的设计开发。机场的网络系统由机场的各个部门与机场指挥中心连接而成,网络操作系统是Windows NT 5.0。整个系统开发采用Delphi 5.0作为开发平台,后台数据库采用IBM DB2 5.2网络数据库。系统的工作模式是由机场指挥中心的服务器发布有关航班消息,把消息传送到机场所属部门的计算机上,机场下属部门收到消息后再返回一条响应消息。因此,机场下属部门的计算机与机场指挥中心服务器的通信只需要简单的消息传送即可,所以笔者在设计该系统时采用了NMMsg和NMMSGServ组件。 源代码网推荐 当机场下属部门发送消息时,调用客户机程序的NMMsg组件的PostIt方法把消息传到机场指挥中心。部分程序代码如下: 源代码网推荐 procedure Tlxgq.BitBtn2Click(Sender:TObject); 源代码网推荐 begin 源代码网推荐 {animate1.active:=true;} 源代码网推荐 //机场指挥中心IP地址 源代码网推荐 NMMsg1.Host:=‘192.168.1.1’; 源代码网推荐 //机场配载部门 源代码网推荐 NMMsg1.FromName:=‘192.168.1.100’; 源代码网推荐 NMMsg1.PostIt(‘192.168.1.100 # HU-122开始加油’); 源代码网推荐 end; 源代码网推荐 机场指挥中心收到消息后,调用服务器端程序NMMSGServ的ClientContact事件,自动传送消息到相应的机场下属部门。部分处理代码如下: 源代码网推荐 procedure Tmtvserver.NMMSGServ1ClientContact(Sender:TObject); 源代码网推荐 begin 源代码网推荐 NMMsgServ1,ReportLevel:=Status_Basic; 源代码网推荐 NMMsgServ1.TimeOut:=90000; 源代码网推荐 StatusBar1.SimpleText:=‘Client connected, 源代码网推荐 now is listening……’; 源代码网推荐 tablel.close; 源代码网推荐 tablel.open; 源代码网推荐 {query1.Close; 源代码网推荐 queryl.SQL.clear; 源代码网推荐 queryl.sql.add(‘select*from hbfsxxb where 源代码网推荐 fsbz is ‘F’’); 源代码网推荐 //hbfsxxb表示航班发送消息表,fsbz表示发送消息标志字段,该字段有两个值‘T’和‘F’。缺省为‘F’,表示消息没有发送 源代码网推荐 query1.open;} 源代码网推荐 end; 源代码网推荐 调用服务器端程序的NMMSGServ的MSG事件可以发送消息的IP地址,因此,可以在机场指挥中心把这个消息发送到机场下属的各个部门。当机场下属部门收到机场指挥中心的消息时,激活客户机程序的NMMSGServ组件的事件把消息添加到Memo1中。 源代码网推荐 procedure Tlxgq.NMMSGServ1MSG(Sender:TComponent;const sFrom,sMsg:String); 源代码网推荐 begin 源代码网推荐 Memo1.Lines.Add(sFrom+‘:’+sMsg); 源代码网推荐 End; 源代码网推荐 小 结 源代码网推荐 无论是客户机程序还是服务器程序,都要使用NMMsg和NMMSGServ两个组件。发送消息时调用NMMsg组件的有关方法和事件,发送完毕即断开连接;接收消息则调用NMMSGServ组件的有关方法和事件,它监听TCP/IP网络上其他计算机的连接请求,收到请求时就建立连接,连接成功后就开始接收消息,接着又继续监听其他客户机的连接请求。因此,可以同时建立多个连接,实现与多客户的通信。 源代码网推荐 Delphi 5.0中网络通信组件是建立在WinSock基础上的,不要求开发者编制接口程序,可以快速地开发出实际应用系统中的网络通信程序。当通信的双方只需要进行简单的消息传递而不需要进行复杂的交互通信时,采用NMMsg和NMMSGServ组件实现通信是比较合适的,既简单又行之有效。 源代码网推荐 源代码网推荐 源代码网推荐 摘自:计算机世界网 源代码网推荐 源代码网供稿. |
