程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi4的Winsocket編程

Delphi4的Winsocket編程

編輯:Delphi

Delphi4的Winsocket編程   也許你曾經歎服過微軟公司的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等的編程技巧。到那時,你就會有能力參與真正意義上的網絡應用程序的開發,而不是停留在拿來別人的網絡應用軟件,設置一番、會熟練操作的水平上。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved