分类:
2010-08-16 10:34:32
为了适应网络的迅速发展,Delphi推出了大量适合于网络环境开发应用的组件,在这一节里,我们简单介绍Delphi 7的Indy网络组件。
如图10.4所示是Delphi中的Indy组件页,其上集中了当前网络上常见的服务类型。
图10.4 Indy组件页10.3.1 Indy组件
封装了TCP客户端的所有功能,包括套接字支持,用于编写TCP客户端软件或派生其他类。
封装了UDP客户端的所有功能,包括套接字支持,用于编写UDP客户端软件或派生其他类。
实现FTP协议,可用于编写FTP客户端软件。
支持HTTP协议的客户端,可用于编写浏览器。
发送ICMP包探测主机信息。
实现IRC(Internet Relay Chat)协议,用于编写即时通信类客户端软件。
实现POP3协议,用于编写邮件接收客户端软件。
实现SMTP协议,用于编写邮件发送客户端软件。
用于从网络上的日期时间服务器上得到时间。
允许程序访问网络新闻传输协议服务器,它提供了新闻读取和发送操作的能力。
按照RFC 868的规定,从网络上的日期时间服务器上得到时间。
封装了完整的多线程TCP服务。
封装了完整的多线程UDP服务。
实现FTP服务。
实现HTTP 1.0、HTTP 1.1服务。
实现SMTP服务。
下面我们主要介绍在本章程序中用到的IdUDPClient和IdUDPServer组件的相关属性、方法和事件。其他的快速开发网络相关组件以及更多的Delphi网络编程知识,请查阅Delphi在线帮助以及相关书籍。
10.3.2 IndyUDPClient和IndyUDPServer组件
TIdUDPClient组件用于实现基于UDP的客户端的通信管理,用Send方法传输数据给由Host和Port属性指定的远程计算机。
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型变量,包含了本地计算机名。
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异常。
TIdUDPServer组件用于实现多线程的基于UDP的服务器端的通信管理。
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型变量,包含了本地计算机名。
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过程类似。