网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
用Delphi 5.0实现网络通信
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

南京航空航天大学 牛新庄 丁宗红

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组件。
  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组件实现通信是比较合适的,既简单又行之有效。


摘自:计算机世界网

  • 上一篇资讯: 读写CMOS内存
  • 下一篇资讯: 实现远程屏幕抓取
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号