也許你曾經嘆服過微軟公司的IE瀏覽器等網絡應用軟體功能之強大,技術之先進,也許你目前還沒有能力開發這樣的一個複雜的大型系統,不過不用著急,這裡可以給你一個練習的機會,就是學會用Delphi的Winsocket來編寫基於TCP/ip的應用程序,這裡假設你已經對Delphi開發工具已經初步熟悉了。
我們可以想像,如果從最原始開始來編寫一段實現與遠程計算機通信的程序,則必須對相關的網絡協議、系統的底層知識以及網絡軟硬體技術有一個全面的熟悉和掌握,然而這在短時間內對大多數人來講,都不是一件容易的事。
幸運的是Delphi的網路元件庫中為我們提供了關於實現網路通訊的元件,它們封裝了複雜的具體實現的細節。其中ClientSocket和ServerSocket元件使我們能夠很方便地編寫出自己的網路通訊和資源共享程式。
Delphi 4.0中編寫Winsocket程式的步驟分為:
1)Winsocket組件屬性設定;
2)建立與遠端電腦的連線;
3)計算機間的資料傳輸;
以下具體就這三個步驟做詳細說明。
一. Winsocket屬性的設定
Delphi 4.0中將Winsocket細分為兩種元件:ClientSocket和ServerSocket。它們分別作為客戶端和伺服器端的元件。即在客戶端程式中採用ClientSocket元件,而在伺服器端則採用ServerSocket元件。透過這兩種元件之間的通信,再加上輔助的應用程式程式碼,就可以實現一個簡單的通信程式。當然在客戶端程式中再引入ServerSocket的話,那麼客戶端程式就可以充當伺服器了,可以回應其他的客戶端程式的請求。
如果正在編寫伺服器端程序,就必須設定ServerSocket組件的Port屬性。之所以要設定此參數,是因為在同一台電腦上可能運行多個伺服器程序,而它們可能總是不停地接受來自於遠端客戶端程式的連線請求。如果你正試圖發送一份電子郵件,而係統卻將你的請求連接到了另外一個伺服器程式上了,則你的郵件就肯定無法正常發送出去了。所以必須給伺服器程式上的ServerSocket元件設定一個合適的連接埠號碼Port。也可以設定Service屬性,它指示了ServerSocket所提供的服務類型,例如:FTP、HTTP等等。然後設定Active屬性為True。
如果正在編寫客戶端程序,則設定ClientServer元件的屬性就多一些。 Port屬性應設定成和伺服器端的Port屬性值一致。另外Host的屬性必須正確設置,它是一個唯讀屬性,在設計時不可用。它指示了客戶程式所要連接的遠端伺服器的主機名稱。也可以設定Address屬性,也就是遠端主機的IP位址。如果這兩個屬性都設定了的話,那麼系統就會採用Host屬性,而Address屬性設定的IP位址就變成無效了。
二.建立與遠端電腦的連接
若要在遠端電腦系統之間進行資料傳輸,首先必須在通訊的兩台主機之間建立連線。
伺服器端的ServerSocket元件呼叫Open方法初始化Socket連接,同時也就設定了Active屬性為True,將ServerSocket元件設定成偵聽模式,隨時偵測是否有連接請求。
如果伺服器接受了客戶程式的連線請求,則觸發OnAccept事件,以下程式碼就是處理接受連線後伺服器程式所要做的工作。
PRocedure Myform..ServerSocketAccept(Sender: TObject,Socket: TCustomWinSocket);
begin
IsServer := True;
end;
在客戶端程式中,ClientSocket元件則設定Port、Host等必須的屬性,然後設定Active屬性為True,提出連線請求。
三.計算機之間的資料傳輸
一旦伺服器端接受了客戶機方面的連線請求,客戶機就可以傳送資料。這時,在客戶機和伺服器之間就擁有了一個Socket,透過此Socket雙方實現通訊。所以Socket屬性很重要,它又擁有很多的方法,用其中的幾個簡單的方法,就可以實現資料的傳送和接收。
客戶端用以下形式:ClientSocket1.socket.sendtext('string you want to send');
在伺服器端採用以下形式:ServerSocket1.socket.recievetext( str: string);此函數傳回接受到的字串的長度,將字串儲存在變數str中。
上述是資料傳輸的最簡單的例子,你也可以採用Socket屬性所提供的其他方法來實現複雜的資料傳輸。
雖然Delphi 4.0中使用Winsocket元件十分方便,但是要真正熟練運用它來實現網路應用程式的開發,則必須仔細閱讀關於它的說明文件和範例程式。在不斷的學習中比較這種方法的優點,掌握其程式設計特點,進而掌握Delphi中所提供的其它網路元件,例如:NMPOP3、NMUDP、NMFTP等的程式設計技巧。到那時,你就會有能力參與真正意義上的網路應用程式的開發,而不是停留在拿來別人的網路應用軟體,設定一番、會熟練操作的水平。