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

解決


バニラ  2004-03-28 02:05:43  No: 7977  IP: 192.*.*.*

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

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

編集 削除
るるとん@K  2004-03-28 10:07:19  No: 7978  IP: 192.*.*.*

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

編集 削除
バニラ  2004-03-28 12:36:41  No: 7979  IP: 192.*.*.*

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

編集 削除
るるとん@K  2004-03-28 13:36:02  No: 7980  IP: 192.*.*.*

Connectios[i]は何型ですか?

編集 削除
るるとん@K  2004-03-28 13:43:30  No: 7981  IP: 192.*.*.*

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

編集 削除
バニラ  2004-03-28 13:44:06  No: 7982  IP: 192.*.*.*

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

編集 削除
患者さ〜ん  2004-03-28 16:32:34  No: 7983  IP: 192.*.*.*

例えば、クライアントに接続する前にそのクライアントのハンドル名を
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-28 19:17:21  No: 7984  IP: 192.*.*.*

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

編集 削除
バニラ  2004-03-29 00:09:33  No: 7985  IP: 192.*.*.*

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

編集 削除