當前位置:編程學習大全網 - 源碼下載 - 用Delphi實現WinSocket高級應用程序

用Delphi實現WinSocket高級應用程序

Socket通信在Windows中是排隊的,由操作系統處理,接收方與發送方協同工作,否則會造成數據丟失,所以不能用類似for語句的循環發送多組數據,更不能用loop語句接收數據。例如,可以使用for語句復制幾個文件,這是常見和正常的,但在套接字編程和大型。大多數網絡應用程序編程是不可行的,因為網絡通信的基本方式是請求和應答。另外,和所有的通信編程壹樣,Socket編程也遵循數據包傳輸的基本規則,也就是說在Socket編程中,壹次發送和接收壹個包,保證數據傳輸的安全性和穩定性,同時不占用太多的系統資源。

對於ClientSocket組件,從字面上可以看出它是為請求方使用的,也就是說它的動作是主動建立連接。顯然,ServerSocket組件是用於響應方的,它的作用是監聽和被動接受連接。

組件ClientSocket的屬性是相對靜態的,它和ServerSocket之間只有連接和斷開的關系,只有ServerSocket接受它才意味著建立連接。

組件ServerSocket的屬性是動態的。當壹個新的ClientSocket與它建立連接時,會產生壹個新的Socket,它會與ClientSocket保持單獨的連接進行單獨的通信,這樣就可以與同壹個ServerSocket中的多個客戶端Socket保持同時連接和獨立通信。ServerSocket的屬性Socket ActiveConnections用於指示客戶端連接數,而屬性Socket Connections[Index]用於訪問連接到客戶端套接字的單個套接字。

正是這種結構使得WinSocket技術能夠穩定地實現壹個服務程序為多個客戶端提供服務。

在獨立的ClientSocket中,屬性Socket數據是壹個指針,在ServerSocket的每個獨立Socket連接[index]中默認值是nil。屬性數據也是指針,默認值為nil,所以可以通過這個指針建立並保存獨立的相關信息,實現獨立通信,而ClientSocket的event OnRead中調用方法傳遞的Socket值就是響應這個事件的對象屬性。客戶端套接字也在服務器套接字中。OnClient中調用方法傳遞的參數Socket是當前發送數據客戶端對應的唯壹Socket連接,即server Socket Socket connections[index],這樣就可以清楚地區分不同的連接。

首先,介紹了示例程序的設計思想。上傳文件的過程是這樣的(其中C和S分別代表客戶端和服務器端)。

上傳文件的請求。s準備接收C需要上傳的文件信息。s接收文件信息。c第壹個包S接收第壹個包創建文件,開始寫數據。中間包S接收中間包並繼續寫入數據。發送最後壹個數據包並關閉文件。s接收最後壹個寫入數據的數據包。下載文件的過程如下。

C請求下載文件S準備好下載文件信息(文件名)S反饋文件信息(文件大小)C準備好接收數據S第壹個包C收到第壹個包創建文件開始寫數據S中間的包C收到中間的包繼續寫數據S最後壹個包發送完畢文件關閉。最後壹個數據包被寫入,文件被關閉。成功下載成功下載,發送中間數據包並接收中間數據包。可以根據包數重復。不難看出,以上兩個過程都是典型的應對方式。

下面是客戶端應用程序和服務器應用程序的結構。客戶端應用程序包括

客戶端DPR uClient PAS( DFM)(壹個ClientSocket組件,壹個按鈕,壹個標簽和壹個進度條)uClientMain PAS( DFM)(壹組用於選擇文件的控件和壹個編輯控件,三個按鈕)uSocketCommon PAS服務器端應用程序包括

Server DPR uServer PAS( DFM)(壹個ServerSocket組件,壹個Memo控件和兩個按鈕)uSocketCommon PAS,其中Socket編程的主要代碼包含在uSocketCommon單元中,客戶端和服務器應用程序都需要這個單元。

結合這個例子,Delphi中的WinSocket編程可以總結如下。

Lishi Xinzhi/Article/program/Delphi/201311/25007

  • 上一篇:目前廣泛應用的驗證碼是什麽?
  • 下一篇:安裝程序平臺源代碼
  • copyright 2024編程學習大全網