特定クライアントに返信するには?

解決


バニラ  2004-03-28 11:05:43  No: 7977

サーバソケットで複数のクライアントが接続している場合、メッセージを送信して来たクライアントにのみ、返信したいのですがどの様にすれば宜しいでしょうか。
サーバソケットのDataプロパティーを使えば良いという事は分かったのですが、Connections{i]とDataプロパティーどの様に結びつければよいか分かりません。
ClientReadの中で、Socket->SendTextすれば、そのクライアントに送信できるのは、わかっているのですが、このイベント外で行いたいのです。

DataとConnectionを結びつける方法を教えていただけないでしょうか?


るるとん@K  2004-03-28 19:07:19  No: 7978

Data:=@Connections[i]
PChar(Data)^:=Connections[i]
下のはPCharじゃないかな
じゃなくてiを関連付ればいいのかな
PInteger(Data)^:=i
間違ってても責めないでください


バニラ  2004-03-28 21:36:41  No: 7979

るるとん@Kさん返答有難うございます。
うまく、いきません。
皆さんは特定のクライアントを探し出す場合、FOR
文でぐるぐる回して、Connectios[i]に一致するiを毎回探しだしているのでしょうか?
OnClientConnectでDataプロパティーを利用すれば、うまく出来そうな気がするのですが。


るるとん@K  2004-03-28 22:36:02  No: 7980

Connectios[i]は何型ですか?


るるとん@K  2004-03-28 22:43:30  No: 7981

Dateに数値を入れる場合
PInteger(Data)^:=数値
PInteger(Data)^でDataの内容が使えます


バニラ  2004-03-28 22:44:06  No: 7982

CustomWinSocketへのポインタです
プログラムはBuilder5で作成しているのですが、良い提示板が見つからず
ここで質問させていただいています。


患者さ〜ん  2004-03-29 01:32:34  No: 7983

例えば、クライアントに接続する前にそのクライアントのハンドル名を
Edit1に書き込んでおいて、それをDataに保存。
クライアントの誰か1人に返信する時は、例えばEdit2にそのハンドル名を入れておいて…

type
  TClientData = class
    Name : string;
    ....
  end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
  cd : TClientData;
begin
  cd := TClient.Create;
  cd.Name := Edit1.Text;
  Socket.Data := cd;
  ...
end;

procedure TForm1.SendMessageToUser(msg : string);
var
  i : Integer;
  cd : TClientData;
begin
  for i:=0 to ServerSocket1.Socket.ActiveConnections - 1 do begin
    cd := TClientData(ServerSocket1.Socket.Connections[i].Data);
    if cd.Name = Edit2.Text then ServerSocket1.Socket.SendText(msg);
  end;
end;


バニラ  2004-03-29 04:17:21  No: 7984

患者さ〜ん 有難うございました。おかげで、何とか解決しそうです。
サーバソケットで、クライアントの上限数を設けるばあいは、ClientConnectイベントで、ActiveConnectionを上限に達していれば、そのSocketをClientConnectイベントでCloseしてしまう等やればよいのでしょうか?
ClientConnect中に書くのは間違っている気がするのですが。。。
みなさん、本当に親切に教えて頂きありがとうございます。


バニラ  2004-03-29 09:09:33  No: 7985

ありがとうございました。何とか解決することができました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加