詢問一個有關ServerSocket端傳回client端的問題,雖然之前問過了 |
缺席
|
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
Dears:
之前我有詢問過大家一個問題:如果同時有很多client端連線進server端,而server端只要傳訊息給一個指定的client端,該如何處理呢?
許多人所提供的意見是:可以依據 Client 端的 IP 來判斷是否該傳訊息。
也就是使用Socket->RemoteAddress來擷取client的IP來做判斷。不過,Socket->RemoteAddress只能在ServerSocket1ClientConnect這個enents才能使用。不能在TForm1::ServerSocket1ClientRead這邊使用。
目前,小弟我的問題是這樣的:
我會有很多client會同時或非同時連上server。然後client連上之後,他會定期丟一串封包給server,在封包內容中會有包含client的識別ID。每一個ID都不會一樣。
所以,現在我想要的功能是,在ServerSocket1ClientRead觸發的時候,我能夠知道client它的Connection[]值。因為,我只有在收到封包的時候才能之道client的識別ID。然後利用識別ID去儲存對應的client的Connection[]值。
然後,當我要對某一個client下命令時,我只要知道他的ID就可以用ServerSocket1->Socket->Connections[0]->SendText("test");去對他下命令。
不知道這樣的方式有什麼語法的處理呢?還是各位大大有其他更好的建議呢?
懇請各位大大提供您寶貴的意見~thanks~ 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: Dears: 之前我有詢問過大家一個問題:如果同時有很多client端連線進server端,而server端只要傳訊息給一個指定的client端,該如何處理呢? 許多人所提供的意見是:可以依據 Client 端的 IP 來判斷是否該傳訊息。 也就是使用Socket->RemoteAddress來擷取client的IP來做判斷。不過,Socket->RemoteAddress只能在ServerSocket1ClientConnect這個enents才能使用。不能在TForm1::ServerSocket1ClientRead這邊使用。 目前,小弟我的問題是這樣的: 我會有很多client會同時或非同時連上server。然後client連上之後,他會定期丟一串封包給server,在封包內容中會有包含client的識別ID。每一個ID都不會一樣。 所以,現在我想要的功能是,在ServerSocket1ClientRead觸發的時候,我能夠知道client它的Connection[]值。因為,我只有在收到封包的時候才能之道client的識別ID。然後利用識別ID去儲存對應的client的Connection[]值。 然後,當我要對某一個client下命令時,我只要知道他的ID就可以用ServerSocket1->Socket->Connections[0]->SendText("test");去對他下命令。 不知道這樣的方式有什麼語法的處理呢?還是各位大大有其他更好的建議呢? 懇請各位大大提供您寶貴的意見~thanks~ 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!leeli 你好: 也可以 SocketHandle 來分辨是哪一個 Client src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
引言: leeli 你好: 也可以 SocketHandle 來分辨是哪一個 Client http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36597 -- Enjoy Researching & Developing --Dear RaynorPao: 您說的方式我有大概先看一下了,不過還沒有下去試。 不過,難道沒有可以在ServerSocket1ClientRead這邊直接就可以知道Connection[]值的方式嗎? 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! |
leeli
初階會員 發表:57 回覆:55 積分:27 註冊:2003-06-25 發送簡訊給我 |
Sorry,在強調一點:
小弟我想要利用識別ID來對應回傳的client端。而這組ID必須要在收到client傳過來的封包中才能得到~所以我必須要在ServerSocket1ClientRead事件中去解析封包內容後才能得知對應的client。&同樣一個ID的client他可能會常發生斷線重新連上server的情形(因為使用無線網路的關係),且每次client端所分配到的IP會不一樣。以上是我目前的情況。
因為大大所說的Socket->RemoteAddress這個語法好像不能在ServerSocket1ClientRead這個事件中使用說~ 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! |
pdcmg
一般會員 發表:3 回覆:22 積分:20 註冊:2004-11-09 發送簡訊給我 |
引言: Sorry,在強調一點: 小弟我想要利用識別ID來對應回傳的client端。而這組ID必須要在收到client傳過來的封包中才能得到~所以我必須要在ServerSocket1ClientRead事件中去解析封包內容後才能得知對應的client。&同樣一個ID的client他可能會常發生斷線重新連上server的情形(因為使用無線網路的關係),且每次client端所分配到的IP會不一樣。以上是我目前的情況。 因為大大所說的Socket->RemoteAddress這個語法好像不能在ServerSocket1ClientRead這個事件中使用說~ 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!在Server端的ClientRead內可以使用Socket->RemoteAddress啊~ void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString RIP=Socket->RemoteAddress; AnsiString RHost=Socket->RemoteHost; AnsiString SH=IntToStr(Socket->SocketHandle); for(int k=0; k < ServerSocket1-> Socket->ActiveConnections; k ) { if(ServerSocket1->Socket->Connections[k]->RemoteAddress==RIP && ServerSocket1->Socket->Connections[k]->RemoteHost==RHost && ServerSocket1->Socket->Connections[k]->SocketHandle==StrToInt(SH)) { ServerSocket1->Socket->Connections[k]->SendText("你要傳的資料"); } } } 發表人 - pdcmg 於 2004/11/18 09:50:29 發表人 - pdcmg 於 2004/11/18 17:06:57 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |