全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2453
推到 Plurk!
推到 Facebook!

請問有關ServerSocket端傳回client端的小問題

答題得分者是:dhchang
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-16 17:37:58 IP:211.78.xxx.xxx 未訂閱
請問各位前輩, 當同時有"多個client"連上server,而server收到其中一個client端訊息後, 要回傳給它時,可用什麼方法, 起先只有一個client時,我就用 ServerSocket1->Socket->Connections[0]->SendText("server command"); 現在有多個client,我要如何指定我要傳的client它的Connection[]的值呢? 要給程式自己判斷,我試了幾個方法都試不出來, 所以請各位前輩指教,謝謝了
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-16 18:27:37 IP:61.30.xxx.xxx 未訂閱
可以在兩個event處理 如果您是要在client connect 時就回應時 就在on Connect 的event 如果已經連上,而要等client 有其他的動作時,可在onListen 在event裏面,你不用自已判斷,只要把event 傳進來的 TCustomWinSocket *Socket 直接拿出來用 也就是只要寫 Socket->SendText("aa"); 他就會自動傳回給正在動作的client
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-19 09:37:29 IP:211.78.xxx.xxx 未訂閱
引言: 如果已經連上,而要等client 有其他的動作時,可在onListen 在event裏面,你不用自已判斷,只要把event 傳進來的 TCustomWinSocket *Socket 直接拿出來用 也就是只要寫 Socket->SendText("aa"); 他就會自動傳回給正在動作的client
謝謝turboted前輩,因為這兩天放假, 所以沒有足夠的電腦可以試多client的環境~ 這麼久才給你回覆,真不好意思。 我有一個觀念上的問題不是很清楚,所以再請問一下^^ 在onListen的event裡...他會自動回傳給「正在動作」的client... 請問,server端若不馬上將訊息傳回client,要做一些處理之後才傳回, 而這時又有一client也傳一訊息給server,所以server同時有兩個訊息要處理, 這時兩個client都是「正在動作」嗎? 兩個client都在等待回應, 會不會我server在Socket->SendText("aa");時 收到訊息的是另一個client呢? 請教一下前輩們,謝謝
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-19 09:55:47 IP:61.30.xxx.xxx 未訂閱
Multithread.. 簡單的說 .你在onListen的event 裏面,,要做一些處理之後才傳回... 也就是說 void __fastcall TForm1::ServerSocket1Listen(TObject *Sender, TCustomWinSocket *Socket) { Socket->SendText("aa"); //...... //做了很多事 Socket->SendText("aa"); } 不管是上面的send 還是下面的send 都是一樣送給同一個 您說會不會送錯 不會的,因為bcb會自動處理這個*Socket的multithread問題
dhchang
一般會員


發表:7
回覆:9
積分:8
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-19 10:04:16 IP:61.218.xxx.xxx 未訂閱
參考看看 //--------------------------------------------------------------------------- void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket) { Num ; } void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) { Num--; } void __fastcall TForm1::ServerSocket1Listen(TObject *Sender, TCustomWinSocket *Socket) { //把收到的message 回覆給 client AnsiString buf = Socket->ReceiveText(); for (int i = 0 ; i < Num ; i ) if (ServerSocket1->Socket->Connections[i]->RemoteAddress == Socket->RemoteAddress) ServerSocket1->Socket->Connections[i]->SendText(buf); }
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-19 11:37:33 IP:211.78.xxx.xxx 未訂閱
感謝dhchang前輩提供此精闢的程式碼, 對小弟我真是有莫大的幫助,我已解決問題,太謝謝了!!! 另外
系統時間:2024-04-24 23:50:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!