Chinaunix首页 | 论坛 | 博客
  • 博客访问: 544731
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类:

2010-08-16 10:34:32

来源: 清华大学出版社

为了适应网络的迅速发展,Delphi推出了大量适合于网络环境开发应用的组件,在这一节里,我们简单介绍Delphi 7的Indy网络组件。

如图10.4所示是Delphi中的Indy组件页,其上集中了当前网络上常见的服务类型。

图10.4 Indy组件页10.3.1 Indy组件

1. Indy Clients页

(1)IdTCPClient

封装了TCP客户端的所有功能,包括套接字支持,用于编写TCP客户端软件或派生其他类。

(2)IdUDPClient

封装了UDP客户端的所有功能,包括套接字支持,用于编写UDP客户端软件或派生其他类。

(3)IdFTP

实现FTP协议,可用于编写FTP客户端软件。

(4)IdHTTP

支持HTTP协议的客户端,可用于编写浏览器。

(5)IdICMPClient

发送ICMP包探测主机信息。

(6)IdIRC

实现IRC(Internet Relay Chat)协议,用于编写即时通信类客户端软件。

(7)IdPOP3

实现POP3协议,用于编写邮件接收客户端软件。

(8)IdSMTP

实现SMTP协议,用于编写邮件发送客户端软件。

(9)IdDayTime

用于从网络上的日期时间服务器上得到时间。

(10)IdNNTP

允许程序访问网络新闻传输协议服务器,它提供了新闻读取和发送操作的能力。

(11)IdTime

按照RFC 868的规定,从网络上的日期时间服务器上得到时间。

2. Indy Server页

(1)IdTCPServer

封装了完整的多线程TCP服务。

(2)IdUDPServer

封装了完整的多线程UDP服务。

(3)IdFTPServer

实现FTP服务。

(4)IdHTTPServer

实现HTTP 1.0、HTTP 1.1服务。

(5)IdSMTPServer

实现SMTP服务。

下面我们主要介绍在本章程序中用到的IdUDPClient和IdUDPServer组件的相关属性、方法和事件。其他的快速开发网络相关组件以及更多的Delphi网络编程知识,请查阅Delphi在线帮助以及相关书籍。

10.3.2 IndyUDPClient和IndyUDPServer组件

1. TIdUDPClient组件

TIdUDPClient组件用于实现基于UDP的客户端的通信管理,用Send方法传输数据给由Host和Port属性指定的远程计算机。

(1)属性

Host

字符属性,指定数字或者字符形式的IP地址。可以在运行期间或者设计期间设定。

Port

整数属性,Port指定连接到远程主机的端口。在OnCreate事件中,这个属性被指定为该协议默认的端口。

Active

布尔属性,指明TIdUDPClient的Socket绑定是否已经分配。在Delphi 7 的集成开发环境中,Active属性总是为False。

ReceiveTimeout

整数属性,指明接收包时的超时毫秒数。

Binding属性

该属性是只读的TIdSocketHandle类型的变量,用于发送和接收数据的Socket绑定。与TIdTCPClient不同,TIdUDPClient并不创建一个和远程计算机的永久连接。

BroadcastEnabled

该属性是一个布尔型变量,用于指出Socket绑定是否执行广播传输。Broadcast方法可以更新BroadcastEnabled值。

BufferSize

该属性是一个整型变量,用于表明传送的UDP数据报的最大字节数。默认的最大值为8192。如果ReceiveString方法遇到一个比BufferSize大的数据包,将产生一个EIdSocketError异常。

LocalName

该属性是一个只读的String型变量,包含了本地计算机名。

(2)方法与过程

Procedure Send(Var Adata:String);Overload;
Procedure Send(AHost:String;Const Aport:Integer;Const AData:String);

在第一种形式中,Send过程将Adata的数据传送给由 Host属性和Port属性指定的远程计算机;而在第二种形式中,Send过程将Adata中的数据传送给由AHost参数和Aport参数指定的远程计 算机。由于UDP不保证数据包的正确传送,所以Adata中的数据可能不会到达远程计算机。

Procedure SendBuffer(Var Abuffer;Const AbyteCount:Integer);Overload;
Procedure SendBuffer(Ahost:String;Const Aport:Integer;
Var Abuffer:Integer;Const AbyteCount:Integer);

其中Abuffer中包含了需要传送的数据,AbyteCount表明了数据量的大小。和Send过程类似。

Procedure RecieveBuffer(Var Abuffer;Const AbufferSize:Integer;

Const AMSec:Integer=IDTimeoutDefault):Integer;Overload;
Procedure RecieveBuffer(Var Abuffer;Const AbufferSize:Integer;

Var VpeerIP :String;Var Vpeer Port:Integer;

Const AMSec:Integer=IDTimeoutDefault):Integer;Overload;

其中AbufferSize指明了欲读取数据的字节数。 AMSec指明了读取数据的超时时间,默认值是IdTimeoutDefault。如果发生超时,该方法将VpeerIP置为空字符串,将 VpeerPort置0。若无法从远程计算机中读取数据,则产生EIdUDPReceiveErrorZeroByte异常。

2. TIdUDPServer组件

TIdUDPServer组件用于实现多线程的基于UDP的服务器端的通信管理。

(1)属性

Bindings

该属性是一个TIdSocketHandle类型的实例连 接。Binding属性包含一个ID_SOCK_DGRAM类型的Socket。Binding为TIdUDPServer提供默认端口号,并通过 TIdUDPListenerThread来访问Socket句柄和协议提供的底层方法。

DefaultPort

整数属性,用来标识由服务器创建的新的Socket绑定的端口号,新的连接用该端口号来进行监听。

Active

布尔属性,指明TIdUDPServer的Socket绑定是否已经分配。在Delphi 7的集成开发环境中,Active属性总是为False。

ReceiveTimeout

整数属性,指明接收包时的超时毫秒数。

Binding属性

该属性是只读的TIdSocketHandle类型的变量,用于发送和接收数据的Socket绑定。与TIdTCPServer不同,TIdUDPServer并不创建一个和远程计算机的永久链路。

BroadcastEnabled

该属性是一个布尔型变量,用于指出Socket绑定是否执行广播传输。Broadcast方法可以更改BroadcastEnabled值。

BufferSize

该属性是一个整型变量,用于表明传送的UDP数据报的最大字节数。默认的最大值为8192。如果ReceiveString方法遇到一个比BufferSize大的数据包,将产生一个EIdSocketError异常。

LocalName

该属性是一个只读的String型变量,包含了本地计算机名。

(2)方法与过程

Procedure RecieveBuffer(Var Abuffer;Const AbufferSize:Integer;

Const AMSec:Integer=IDTimeoutDefault):Integer;Overload;
Procedure RecieveBuffer(Var Abuffer;Const AbufferSize:Integer;

Var VpeerIP :String;Var Vpeer Port:Integer;

Const AMSec:Integer=IDTimeoutDefault):Integer;Overload;

其中AbufferSize指明了欲读取数据的字节数。 AMSec指明了读取数据的超时时间,默认值是IdTimeoutDefault。如果发生超时,该方法将VpeerIP置为空字符串,将 VpeerPort置0。若无法从远程计算机中读取数据,则产生EIdUDPReceiveErrorZeroByte异常。

Procedure Send(AHost:String;Const Aport:Integer;Const AData:String);

Send过程将Adata中的数据传送给由AHost参数和Aport参数指定的远程计算机。由于UDP不保证数据包的正确传送,所以Adata中的数据可能不会到达远程计算机。

Procedure SendBuffer(Ahost:String;Const Aport:Integer;
Var Abuffer:Integer;Const AbyteCount:Integer);

其中Abuffer中包含了需要传送的数据,AbyteCount表明了数据量的大小。和Send过程类似。

阅读(1113) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~