你有沒有用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的簡單介紹就到這裡了感興趣的朋友就去下載一個用吧你一定會喜歡上它的
From:http://tw.wingwit.com/Article/program/Delphi/201311/25074.html