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

ServerSocket的Connections問題

答題得分者是:RaynorPao
stickitout
一般會員


發表:15
回覆:8
積分:4
註冊:2003-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-30 02:34:08 IP:210.68.xxx.xxx 未訂閱
各位大大好!小弟現在有一個問題。 小弟目前的構想是這個樣子的…… 我先將ServerSocket開啟在Listening的狀態,再將Client連線到Server。 而ServerSocket在收到Client的連線之後,會RemoteHost加入CheckListBox 之中。也就是說…第一個加入CheckListBox的Item就是Connection[0]。 小弟的問題來了……當我將CheckListBox中的某個Item刪除之後,我就沒有 辦法辨認它是第幾條Connection……(就是說,如果刪除到只剩一個Item, 它又是Connection幾呢?)Server有沒有辦法判別第i條Connections的 Hostname與IP位址呢?? 謝謝各位大大!!
sumyan
一般會員


發表:0
回覆:1
積分:0
註冊:2003-08-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-30 10:20:50 IP:218.13.xxx.xxx 未訂閱
使用socket的Socket.SocketHandle控制碼就可以把用戶端clientsocket分得清清楚楚啦
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-31 00:07:08 IP:61.221.xxx.xxx 未訂閱
引言: 各位大大好!小弟現在有一個問題。 小弟目前的構想是這個樣子的…… 我先將ServerSocket開啟在Listening的狀態,再將Client連線到Server。 而ServerSocket在收到Client的連線之後,會RemoteHost加入CheckListBox 之中。也就是說…第一個加入CheckListBox的Item就是Connection[0]。 小弟的問題來了……當我將CheckListBox中的某個Item刪除之後,我就沒有 辦法辨認它是第幾條Connection……(就是說,如果刪除到只剩一個Item, 它又是Connection幾呢?)Server有沒有辦法判別第i條Connections的 Hostname與IP位址呢?? 謝謝各位大大!!
stickitout 你好: 請參考以下的連結文章
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
chance
一般會員


發表:19
回覆:9
積分:5
註冊:2003-08-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-03 03:18:32 IP:210.68.xxx.xxx 未訂閱
不好意思~~~~小弟這幾天試了一下~~~~還是不知道如何使用 Socket.SocketHandle 去判別哪一條Connections的IP與HostName是什麼~~?? 我試著把它ShowMessage出來,但是沒有結果……在此請教各位大大! 謝謝!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-03 10:16:19 IP:203.73.xxx.xxx 未訂閱
引言: 不好意思~~~~小弟這幾天試了一下~~~~還是不知道如何使用 Socket.SocketHandle 去判別哪一條Connections的IP與HostName是什麼~~?? 我試著把它ShowMessage出來,但是沒有結果……在此請教各位大大! 謝謝!
chance 你好: 我寫了一個小小的範例,你先參考看看 < class="code"> // Server __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ServerSocket1->Port=4000; ServerSocket1->Open(); } __fastcall TForm1::~TForm1() { ServerSocket1->Close(); } void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket) { AnsiString szRemoteIP=Socket->RemoteAddress; AnsiString szRemoteHost=Socket->RemoteHost; AnsiString szSocketHandle=IntToStr(Socket->SocketHandle); AnsiString szClientList=szRemoteIP "," szRemoteHost "," szSocketHandle; int i=ListBox1->Items->IndexOf(szClientList); if(i<0) { ListBox1->Items->Add(szClientList); } } void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) { AnsiString szRemoteIP=Socket->RemoteAddress; AnsiString szRemoteHost=Socket->RemoteHost; AnsiString szSocketHandle=IntToStr(Socket->SocketHandle); AnsiString szClientList=szRemoteIP "," szRemoteHost "," szSocketHandle; int i=ListBox1->Items->IndexOf(szClientList); if(i>=0) { ListBox1->Items->Delete(i); } } void __fastcall TForm1::Button1Click(TObject *Sender) { if(Edit1->Text=="") Edit1->Text="Testing"; if(ListBox1->Count<=0) return; if(ListBox1->ItemIndex<0) ListBox1->ItemIndex=0; TStringList *sl=new TStringList; sl->CommaText=ListBox1->Items->Strings[ListBox1->ItemIndex]; for(int i=0; iSocket->ActiveConnections; i ) { if(ServerSocket1->Socket->Connections[i]->RemoteAddress==sl->Strings[0] && ServerSocket1->Socket->Connections[i]->RemoteHost==sl->Strings[1] && ServerSocket1->Socket->Connections[i]->SocketHandle==StrToInt(sl->Strings[2])) { ServerSocket1->Socket->Connections[i]->SendText(Edit1->Text); } } delete sl; } // Client __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ClientSocket1->Address="192.168.1.1"; ClientSocket1->Port=4000; ClientSocket1->Open(); } __fastcall TForm1::~TForm1() { ClientSocket1->Close(); } void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) { ShowMessage(Socket->ReceiveText()); } -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
pyusi
一般會員


發表:6
回覆:2
積分:1
註冊:2004-10-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-22 18:22:38 IP:210.202.xxx.xxx 未訂閱
RaynorPao大哥及各位前輩你好: 我試了你的範例,Client程式在//Server程式完後繼續寫(如下), // Client __fastcall TForm1::TForm1(TComponent* Owner)    : TForm(Owner) {    ClientSocket1->Address="192.168.1.1";    ClientSocket1->Port=4000;    ClientSocket1->Open(); } __fastcall TForm1::~TForm1() {    ClientSocket1->Close(); }    BCB6.0會無法Compile(Run)過,出現如下error message: [C++ Error] Unit1.cpp(76): E2171 Body has already been defined for function '_fastcall TForm1::TForm1(TComponent *)' [C++ Error] Unit1.cpp(86): E2171 Body has already been defined for function '_fastcall TForm1::~TForm1()'    請問是否//Client寫在另一個BCB的project? 若是如此,在另一BCB如下也compile不過,且error message : "Asynchronous 00610 error" __fastcall TForm1::TForm1(TComponent* Owner)         : TForm(Owner) {         ClientSocket1->Address="192.168.1.1";         ClientSocket1->Port=4001;         ClientSocket1->Open(); }    所以請教Ray大哥及各位前輩該如何解決?    小妹我是BCB新手,發問蠢問題,敬請見諒。 感謝各位!
系統時間:2024-11-27 20:38:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!