線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1308
推到 Plurk!
推到 Facebook!

判斷是哪一個ServerSocket

尚未結案
ckrl933
一般會員


發表:16
回覆:15
積分:6
註冊:2005-01-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-06 16:38:04 IP:61.220.xxx.xxx 未訂閱
我宣告了16個ServerSocket指標, 然後將16個ServerSocket的 OnClientRead, OnClientDisconnect, OnClientError事件, 分別都指向同一個function來處理, 不過在事件中如何判斷是 哪一個ServerSocket產生的???? 程式如下:
for (int count = 1; count < 17; count  )
{
    ServerSocket[count]        = new TServerSocket(this);
    ServerSocket[count]->Port = 4000   count;
    ServerSocket[count]->OnClientDisconnect = ServerSocketGlobalClientDisconnect;
    ServerSocket[count]->OnClientError = ServerSocketGlobalClientError;
    ServerSocket[count]->OnClientRead = ServerSocketGlobalClientRead;
    ServerSocket[count]->Open();
}    .
.
.
void __fastcall TMainForm::ServerSocketGlobalClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
   TServerSocket *tempServerSocket = dynamic_cast(Sender);
        
   for (int client = 1; client < Max_ServerTCP   1; client  )
   {
       if (ServerSocket[client] == tempServerSocket)                
//                      ^^^^^^我主要要得知這個編號
       {
         ServerSocket[client]->Socket->Connections[0]->ReceiveBuf(&scmessage, sizeof(struct SCMessage));
         ::Sleep(100); 
         HandleClientMsg(client);                        
       }
    }        
}
.
.
.
.
上面是錯誤的, 因為都不會進ServerSocket[client] == tempServerSocket 判斷式中 應該是我的想法是錯誤的, 要怎麼知道目前發生事件的ServerSocket編號?? 發表人 - ckrl933 於 2005/07/06 16:42:51 發表人 - ckrl933 於 2005/07/06 16:52:30
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-07 01:31:43 IP:221.169.xxx.xxx 未訂閱
ckrl933:你可以利用Tag屬性來判斷!
for (int count = 1; count < 17; count  )
{
    ServerSocket[count]        = new TServerSocket(this);
    ServerSocket[count]->Port = 4000   count;
    ServerSocket[count]->Tag  = count;
    ServerSocket[count]->OnClientDisconnect = ServerSocketGlobalClientDisconnect;
    ServerSocket[count]->OnClientError = ServerSocketGlobalClientError;
    ServerSocket[count]->OnClientRead = ServerSocketGlobalClientRead;
    ServerSocket[count]->Open();
}
.
.
.
void __fastcall TMainForm::ServerSocketGlobalClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
   TServerSocket *tempServerSocket = dynamic_cast(Sender);
        
   for (int client = 1; client < Max_ServerTCP   1; client  )
   {
       if (ServerSocket[client]->Tag == tempServerSocket->Tag)                
//                      ^^^^^^我主要要得知這個編號
       {
         ServerSocket[client]->Socket->Connections[0]->ReceiveBuf(&scmessage, sizeof(struct SCMessage));
         ::Sleep(100); 
         HandleClientMsg(client);                        
       }
    }        
}
.    請參考!
為何你的迴圈都是從一開始而不是0?好奇一問?!
Andy Chang
------
Andy Chang
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-18 17:32:52 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-29 22:04:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!