其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI超级Internet控件集--INDY


发布日期:2022年08月31日
 
DELPHI超级Internet控件集--INDY
你有没有用DELPHI开发Internet程序?是不是常常会烦恼FastNet组件为什么没有源代码?有很多问题不看源代码真不知道是什么问题是不是也觉得FastNet组件支持的网络协议还不够多?现在不用烦恼了有一套功能很丰富使用很方便开放源代码的免费INTERNET控件集可以解决你的烦恼这套控件集就是INDY了

什么是INDY?它有什么功能?怎么用?就让我慢慢道来

INDY的全名是Internet Direct(也叫Winshoes)它是一套开放源代码的Internet控件集它支持大部分流行的Internet协议包括TCPUDPDNSICMPFINGERFTPGOPHERHTTPPOPSMTPTELNETWHOIS等支持BASEMDMDMD等编解码提供INTERNET流行协议的客户端和服务器控件INDY控件集的客户端和服务器控件都有完整详细的源代码例程和帮助文件用户可以根据这些例子简单方便快速的建造各种服务器程序例如WEB服务器TELNET服务器IRC服务器TCPUDP服务器等而这些服务器都是支持多线程的用户也可以很简单的编写出各种客户端程序例如EMAILFINGERFTPPINGTELNET等着名的OICQ使用的协议是UDP有了INDY你可以使用UDP服务器和UDP客户端写出一个和OICQ较劲的东东来

INDY是完全基于SOCKET阻塞工作模式(后面讨论)的开发库现在已经支持BORLAND DELPHIC++ BUIDER和最新的Kylix(LINUX里的DELPHI)等开发平台目前INDY的最新正式发行版本是最新BETA版本是INDY支持DELPHI DELPHI C++BUIDER C++BUIDER Kylix等版本Kylix已经把INDY作为标准组件打包到发行包里了而且据说DELPHI 将会把INDY作为它的INTERNET基本组件由此可见INDY的强悍实力

看了怎么多吸引人的特性是不是迫不及待的想得到它了?不用急你可以随时到INDY的主页上下载一份免费的源代码来安装INDY的网址是(http://wwwnevronacom/Indy/)主页上会公布最新的INDY消息发表更新的源代码和相关文档如果在开发过程中遇到什么问题可以通过访问BORLAND公司的新闻组(news://newsgroupsborlandcom)里面的borlandpublicdelphiinternetwinsock和borlandpubliccppbuilderinternet两个主题来获得免费的技术支持INDY小组会及时回答在新闻组里提出的关于INDY的问题你也可以把使用INDY的心得技巧发现的BUG发表到新闻组里为INDY的发展作出一份贡献

INDY的安装很简单现在INDY的网站正式提供WINDOWS版本的安装程序供下载支持Kylix的版本则包含在BORLAND公司的Kylix发行包里不过由于BORLAND修改了一些文件的原因导致INDY的例程都不能编译成功所以INDY网站提供了针对Kylix修改的例程文件下载下载了安装程序后执行安装程序(请先把你的开发平台程序关掉)设置好安装路径选择好你的开发平台的种类(DELPHI或C++BUIDER)和版本就可以了等安装完成打开你的开发平台程序就可以在控件栏里发现新加的三个栏目INDY SERVERSINDY CLIENTSINDY MISC分别是INDY的服务器类客户端类杂项控件而安装了INDY的目录里包含有INDY的控件文件和控件源代码以及例程你还可以在网站上下载它的帮助文件帮助文件里包括各个控件的详细说明是应用好INDY的必备手册

安装好INDY后可以开始尝试INDY的新鲜好味道了INDY提供的丰富例程就是绝好的教材先编译几个例程看看INDY的强大功能吧要想熟练的使用好INDY就得多多学习这些例程和参考帮助文件

熟悉WINSOCK编程的读者一定会觉得奇怪吧为什么INDY是是完全基于SOCKET阻塞工作模式的呢?异步模式(非阻塞模式)是WINSOCK的一大特点为什么不用呢?

其实之所以大多数WINDOWS下的INTERNET程序都使用异步模式这和WINSOCK的历史有关当WINSOCK被移植到WINDOWS的时候当时的WINDOWS操作系统还是WINDOWS 而WINDOWS 是不支持多线程的不象UNIX下可以使用FORK来运行多进程在WINDOWS 如果使用阻塞模式在通讯时会锁定用户界面使程序没有响应为了避免这种情况WINSOCK就引入异步模式这个新特性而使用异步模式来编制INTERNET程序也就成了WINDOWS程序员的经典教条但是随着新的WINDOWS操作系统的出现如WINDOWS NTME这些操作系统开始支持多线程异步模式这个教条仍然深入人心使很多程序员会下意识的拒绝使用阻塞模式

事实上UNIX下的SOCKET只支持阻塞模式(现在UNXI的SOCKET有了一些新的非阻塞特性不过绝大多数应用仍然使用阻塞模式)阻塞模式具有以下几个比异步模式优越的特点

编程更简单可以把所有处理SOCKET的代码放在一起顺序执行而不用分散在不同的事件处理代码段里

更容易移植到UNIX使用INDY的DELPHI程序可以不做太多(甚至不做)修改就可以把WINDOWS的DELPHI源代码拿到LINUX下用Kylix来编译成LINUX下的网络程序

更容易在多线程程序里使用由于阻塞模式的代码可以放在一起可以很方便的把这些代码包裹在线程里面来使用而不象异步模式需要针对不同的事件设置不同的处理代码

为了兼顾简单可靠和高效INDY是基于阻塞模式工作的阻塞模式需要等待任务完成才返回这样当主线程里调用阻塞任务运行时程序不能处理用户界面的消息INDY提供了一个控件TidAntiFreeze来解决这个问题只要在你的程序里简单的填加一个TidAntiFreeze控件到任何地方(随便往FORM上放)不需要写任何代码(最多把超时时间改一下)就可以很好的解决用户界面不响应的问题

下面有两段示范代码可以看出INDY控件的程序代码和其他使用异步模式的Internet控件的程序代码相比是多么的简洁

代码一INDY控件的程序代码(IndyClient代表INDY控件的一般形式)

with IndyClient do begin

Connect;

Try

// 在这里写入你的处理代码

finally

Disconnect;

end;

end;

代码二其他控件的程序代码(SocketComponent代表一般的Internet控件)

procedure TFormMainTestOnClick(Sender: TComponent);

begin

with SocketComponent do begin

Connect; try

while not Connected do begin

if IsError then begin

Abort;

end;

ApplicationProcessMessages;

OutData := Data To send;

while length(OutData) > do begin

ApplicationProcessMessages;

end;

finally Disconnect; end;

end;

end;

procedure TFormMainOnConnectError;

begin

IsError := True;

end;

procedure TFormMainOnRead;

var

i: Integer;

begin

i := SocketComponentSend(OutData);

OutData := Copy(OutData i + MaxInt);

end;

关于INDY的简单介绍就到这里了感兴趣的朋友就去下载一个用吧你一定会喜欢上它的

上一篇:DELPHI中利用对象的常用属性制作动画

下一篇:用Delphi实现位图显示特技