處理 TServerSocket 的多個 Client 連線 |
|
pental
初階會員 發表:3 回覆:48 積分:30 註冊:2003-09-21 發送簡訊給我 |
看到很多網友問到在使用 TServerSocket 與 TClientSocket 時會遇到 ServerSocket 在擁有多個 Client 連線時,應該如何分辨 Client 呢?
分享一些我自己在一些專案上的實作經驗給大家參考一下! 首先定義一個存放Client連線資料的 Structure struct TClientList
{
TCustomWinSocket *Socket;
AnsiString IP; }; 然後使用 vector 來存放這些Client結構
typedef vector
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
不知道意思是否一樣
我的做法是:
1.現有 A,B,C 三條連線進來,都會觸發 ServerSocket1ClientRead
2.在 ServerSocket1ClientRead 中取出 Socket->RemoteAddress 就知道目前觸發 ServerSocket1ClientRead 的 IP 是多少(假設是 X ,管它 X 是A,或B,C 的 IP)
3.在目前的 Connection 找出誰的 IP 是 X , 將處理後的資料往 IP 是 X 的這個 CONNECTION 丟回去即可,保證不會丟錯人; A 觸發 ServerSocket1ClientRead , 那 X 就是 A 的 IP , B 觸發 ServerSocket1ClientRead , 那 X 就是 B 的 IP
5.不用在另外做對照表或紀錄
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { int ConnectID=-1; //目前之 Socket 在 Connections 中的連結編號 for (int i=0;i發表人 - bruce0211 於 2003/11/05 12:25:01 |
pental
初階會員 發表:3 回覆:48 積分:30 註冊:2003-09-21 發送簡訊給我 |
看了你的做法,我想意思應該是差不多囉!因為在我的程式裡面紀錄的不只有我在範例中寫到的 Socket and IP,還包括各Client擁有的變數值,所以我會這樣的寫! 照你的寫法的話,也可以把
if (ServerSocket1->Socket->Connections[i]->RemoteAddress==Socket->RemoteAddress) 改為
if (ServerSocket1->Socket->Connections[i] == Socket) 只要比對 Socket 就可以了!
感謝您的意見!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |