現在將本人總結出來的TServerSocket和TClientSocket兩個組件的基本用法寫出來,希望與您分享。
ClientSocket組件為客戶端組件。它是通信的請求方,也就是說,它是主動地與服務器端建立連接。
ServerSocket組件為服務器端組件。它是通信的響應方,也就是說,它的動作是監聽以及被動接受客戶端的連接請
求,並對請求進行回復。
ServerSocket組件可以同時接受一個或多個ClientSocket組件的連接請求,並與每個ClientSocket組件建立單獨的
連接,進行單獨的通信。因此,一個服務器端可以為多個客戶端服務 。
設計思路
本例包括一個服務器端程序和一個客戶端程序。客戶端程序可以放到多個計算機上運行,同時與服務器端進行連接
通信。
本例的重點,
ClientSocket組件為客戶端組件。它是通信的請求方,也就是說,它是主動地與服務器端建立連接。
ServerSocket組件為服務器端組件。它是通信的響應方,也就是說,它的動作是監聽以及被動接受客戶端的連接請
求,並對請求進行回復。
ServerSocket組件可以同時接受一個或多個ClientSocket組件的連接請求,並與每個ClientSocket組件建立單獨的
連接,進行單獨的通信。因此,一個服務器端可以為多個客戶端服務 。
設計思路
本例包括一個服務器端程序和一個客戶端程序。客戶端程序可以放到多個計算機上運行,同時與服務器端進行連接
通信。
本例的重點,
一是演示客戶端與服務器端如何通信;
二是當有多個客戶端同時連接到服務器端時,服務器端如何識別每個客戶端,並對請求給出相應的回復。為了保證一個客戶端斷開連接時不影響其它客戶端與服務器端的通信,
同時保證服務器端能夠正確回復客戶端的請求,在本例中聲明了一個記錄類型:
type
client_record=record
CHandle: integer; //客戶端套接字句柄
CSocket:TCustomWinSocket; //客戶端套接字
CName:string; //客戶端計算機名稱
CAddress:string; //客戶端計算機IP地址
CUsed: boolean; //客戶端聯機標志
end;
同時保證服務器端能夠正確回復客戶端的請求,在本例中聲明了一個記錄類型:
type
client_record=record
CHandle: integer; //客戶端套接字句柄
CSocket:TCustomWinSocket; //客戶端套接字
CName:string; //客戶端計算機名稱
CAddress:string; //客戶端計算機IP地址
CUsed: boolean; //客戶端聯機標志
end;
利用這個記錄類型數據保存客戶端的信息,同時保存當前客戶端的連接狀態。其中,
CHandle保存客戶端套接字句柄,以便准確定位每個與服務器端保持連接的客戶端;
Csocket保存客戶端套接字,通過它可以對客戶端進行回復。
Cused記錄當前客戶端是否與服務器端保持連接。
全文:http://www.tuicool.com/articles/v6zEvi