請問多個Client連線Server(使用INDY) |
答題得分者是:RaynorPao
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket) { int i=ListBox1->Items->IndexOf(Socket->RemoteAddress); if(i<0) { ListBox1->Items->Add(Socket->RemoteAddress); } } //--------------------------------------------------------------------------- void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) { int i=ListBox1->Items->IndexOf(Socket->RemoteAddress); if(i>=0) { ListBox1->Items->Delete(i); } }這是之前包子哥提供的方法 但我主要的功能是,單一Server上面有ListBox列表來監看Client是否已經連線了,如果連線就會Show在ListBox上面,但如果Client斷線,ListBox也會相對刪除資料,上面那段程式,基本上如果對不同IP的連線來說是沒問題的,但問題來了 因為我的Client有可能會在同一台電腦(同IP),有很多的Client(*.exe)在執行 但Server端所擁有的資料可能就會是同一個IP無法辨別,例如我在Server上ListBox可能會Show的是如下 140.116.39.126:FindFile.exe 140.116.39.126:Math.exe 那我應該要怎麼處理才能夠讓Server端知道那個Client斷線,相對也刪除他在Server端ListBox的位置選項,我找了站上的文章,有看到Handle來做,不過如果使用Handle做的話,要怎樣在OnDisconnect的event中辨別其handle並且delete 在ListBox上面的連線項目,小弟是新手,請各位高手多多指教 |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言:void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket) { int i=ListBox1->Items->IndexOf(Socket->RemoteAddress); if(i<0) { ListBox1->Items->Add(Socket->RemoteAddress); } } //--------------------------------------------------------------------------- void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) { int i=ListBox1->Items->IndexOf(Socket->RemoteAddress); if(i>=0) { ListBox1->Items->Delete(i); } }這是之前包子哥提供的方法 但我主要的功能是,單一Server上面有ListBox列表來監看Client是否已經連線了,如果連線就會Show在ListBox上面,但如果Client斷線,ListBox也會相對刪除資料,上面那段程式,基本上如果對不同IP的連線來說是沒問題的,但問題來了 因為我的Client有可能會在同一台電腦(同IP),有很多的Client(*.exe)在執行 但Server端所擁有的資料可能就會是同一個IP無法辨別,例如我在Server上ListBox可能會Show的是如下 140.116.39.126:FindFile.exe 140.116.39.126:Math.exe 那我應該要怎麼處理才能夠讓Server端知道那個Client斷線,相對也刪除他在Server端ListBox的位置選項,我找了站上的文章,有看到Handle來做,不過如果使用Handle做的話,要怎樣在OnDisconnect的event中辨別其handle並且delete 在ListBox上面的連線項目,小弟是新手,請各位高手多多指教 willchen 你好: (1)假如有兩個 client 是使用同一台電腦,但是是使用不同的 Port 連線 Server 的話,也許你的 ListBox 裡面最好加一個 Port Number 的字串, 在 client 斷線的時候,由 Server 端得到斷線的 RemotePort,再和 ListBox 裡面的字串做比對,應該就可以知道要刪除哪一個項目了 (>>> --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
//--------------------------------------------------------------------------- #include這是我try過寫的程式,但想請教包子哥,我現在問題卡在,當Client要準備斷線時,在Server端處理比對工作時,必須要取得Client的IP來做整個IndexOf的比對 這樣該怎麼解決,上面的程式,在Server端還是沒辦法砍掉,我是用handle值來做 處理,請問使用INDY在Server端可以知道Client端的IP嗎??(如果不是用IPWatch來做),卡在這邊找BCB help也沒有說Client的IP Method. |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言:willchen 你好: 麻煩你先試試看這兩個可不可以?? < class="code"> void __fastcall TForm1::IdTCPServer1Connect(TIdPeerThread *AThread) { ShowMessage(AThread->Connection->Socket->Binding->PeerIP); } void __fastcall TForm1::IdTCPServer1Disconnect(TIdPeerThread *AThread) { ShowMessage(AThread->Connection->Socket->Binding->PeerIP); } -- Enjoy Researching & Developing --//--------------------------------------------------------------------------- #include這是我try過寫的程式,但想請教包子哥,我現在問題卡在,當Client要準備斷線時,在Server端處理比對工作時,必須要取得Client的IP來做整個IndexOf的比對 這樣該怎麼解決,上面的程式,在Server端還是沒辦法砍掉,我是用handle值來做 處理,請問使用INDY在Server端可以知道Client端的IP嗎??(如果不是用IPWatch來做),卡在這邊找BCB help也沒有說Client的IP Method.
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |