delphi 网络组件indy-Internet Direct

作者: koic 分类: 控件 发布时间: 2025-06-13 09:43

Indy is an open source client/server communications library that supports TCP/UDP/RAW sockets, as well as over 100 higher level protocols including SMTP, POP3, IMAP, NNTP, HTTP, FTP, and many more. Indy is written in Delphi but is also available for C++Builder and FreePascal.

Indy是一个开源的客户端/服务器通信库,支持TCP/UDP/RAW套接字,以及超过100种高级协议,包括SMTP、POP3、IMAP、NNTP、HTTP、FTP等。Indy是用Delphi编写的,但也可用于C++Builder和FreePascal.

相关资料:http://www.e-iter.net/knowledge/indy9/

TIdUDPServer控件中文指南

2007年03月15日 星期四 22:46
IdUDPServer属性
property Bindings: TIdSocketHandles;
用来收集f TIdSocketHandle实例。包含ID_SOCK_DGRAM类型的socket。property DefaultPort: integer;
监听新连接的端口。property ThreadedEvent: boolean;
指示UDP读事件的执行方式。是否以线程的形式执行

property Active: Boolean;
是否开始监听。

property Binding: TIdSocketHandle;
只读属性。指示读写传送的socket句柄。

property BroadcastEnabled: Boolean;
是否广播传送数据。

property BufferSize: Integer;
UDP包的尺寸。

property ReceiveTimeout: Integer;
从一个服务中读取数据的超时时间。

property LocalName: string;
本地计算机名称。

property Version: string;
只读属性,用来获取Indy部件的版本号码。

方法
procedure Broadcast(const AData: string; const APort: integer);
在网络上发送数据到所有的计算机。

unction ReceiveBuffer(var ABuffer; const ABufferSize: Integer; const AMSec: Integer =

IdTimeoutDefault): integer; overload;
function ReceiveBuffer(var ABuffer; const ABufferSize: Integer; var VPeerIP: string; var

VPeerPort: integer; AMSec: Integer = IdTimeoutDefault): integer; overload;
从远程连接中读取数据

function ReceiveString(const AMSec: Integer = IdTimeoutDefault): string; overload;
function ReceiveString(var VPeerIP: string; var VPeerPort: integer; const AMSec: Integer =

IdTimeoutDefault): string; overload;
从远程连接中读取数据

procedure Send(AHost: string; const APort: Integer; const AData: string);
向远程计算机系统发送数据。
procedure SendBuffer(AHost: string; const APort: Integer; var ABuffer; const AByteCount:

integer);
向远程计算机系统发送数据

事件
property OnUDPRead: TUDPReadEvent;
UDP读取事件发生时执行。
参数
ABinding
接受UDP数据报的socket。
AData
在UDP数据报中接受数据的流。

property OnStatus: TIdStatusEvent;
指示当前连接状态的句柄。
参数
aaArgs
用来构造当前状态文本消息的格式化参数。
axStatus
当前连接状态。取值范围与TIdUDPClient类中的OnStatus事件相同。

procedure BeginWork(AWorkMode: TWorkMode; const ASize: Integer = 0); virtual;
当OnBeginWork事件触发时执行
AWorkMode可以取的值:
wmRead--从远程连接中读取数据。
wmWrite-- 向远程连接发送数据。

procedure DoWork(AWorkMode: TWorkMode; const ACount: Integer); virtual;
当OnWork事件触发时执行。

procedure EndWork(AWorkMode: TWorkMode); virtual;
当OnEndWork事件触发时执行。

从INDY9升级到INDY10的改正方法

1、TIdUDPClient

INDY9:

TIdUDPClient1.SendBuffer(‘127.0.0.1’,9999,Request,SizeOf(Request));
TIdUDPClient1.ReceiveBuffer(ResponseBlock,SizeOf(ResponseBlock));

INDY10:

VAR:Temp:Tbytes;

TIdUDPClient1.SendBuffer(‘127.0.0.1’, 9999, RawToBytes(Request, SizeOf(Request)));
SetLength(Temp, SizeOf(ResponseBlock));

TIdUDPClient1.ReceiveBuffer(Temp);
bytestoraw(Temp, ResponseBlock, SizeOf(ResponseBlock));

2、TIdUDPServer

INDY9:

procedure TfrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);

……

if AData.Size = SizeOf(Request) then
begin
AData.Read(Request,SizeOf(Request));

………

ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,FileInfo,SizeOf(FileInfo));

INDY10:

procedure TfrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle);

…….

if length(AData)= SizeOf(Request) then
begin
//将接收到的Tbytes信息转化为Trequest类型的数据结构Request中
BytesToRaw(AData, Request, SizeOf(TRequest));

ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,rawtobytes(FileInfo,SizeOf(FileInfo)));

 

相关参考:https://blog.51cto.com/u_12668715/8582845

Indy Demo for Delphi7是Delphi 7开发环境中的一个经典项目,它展示了如何使用Indy组件集进行网络通信的开发。Indy是一个强大的开源互联网组件集,适用于Delphi 6、Kylix 1和C++Builder 6及以上版本。以下是对Indy Demo for Delphi7的总结介绍:
1. 技术背景:Indy最初被称为WinShoes(双关于WinSock——Windows的Socket库),由Chad Z. Hower领导的开发者团队开发。
2. 组件功能:Indy提供了一套丰富的网络通信组件,支持多种协议如TCP/IP、UDP等,并允许开发者构建基于各种协议的TCP客户和服务器应用程序。
3. 应用范围:Indy不仅适用于简单的客户端-服务器应用,还支持复杂的多线程网络编程,使得开发者可以高效地处理大量并发连接。
4. 环境要求:Indy组件被包含在Delphi 6,Kylix 1和C++ Builder 6及以上各个版本的Borland开发环境中。
5. 安装与使用:在Delphi 7中,Indy组件共有100多个,通过这些组件,开发者可以开发出跨平台的网络通信应用。
6. 性能优势:Indy组件能够实现与应用程序主线程分离的监听线程来监听客户连接请求,为每个客户创建新的线程提供服务,提高了程序的性能和稳定性。
综上所述,Indy Demo for Delphi7是Delphi 7开发环境中一个不可多得的学习资源,它不仅展示了Indy组件的强大功能,还提供了实际的项目示例,帮助开发者更好地理解和掌握网络通信编程。对于希望深入学习网络通信技术的开发者来说,这个项目是非常有价值的。

 

相关参考文档下载:

Indy In Depth 中文版.pdf: https://url54.ctfile.com/f/5105654-1515495961-58b111?p=310772 (访问密码: 310772)
indy控件-Delphi 7组件经典解析 — (koic.cn).pdf: https://url54.ctfile.com/f/5105654-1515325717-77f8eb?p=310772 (访问密码: 310772)
UDP聊天-Delphi软件工程案例精解(koic.cn).pdf: https://url54.ctfile.com/f/5105654-1515279286-38c11e?p=310772 (访问密码: 310772)

发表回复