Q&A

  • [질문] indy 9 을 이용하여 특정 아이피 (192.168.0.3)에 값을 전송하려 합니다.
indy 9 을 이용하여 특정 아이피 (192.168.0.3) 에 'x' 라는 값을 전송하려고 합니다
아래의 코딩처럼 Button1Click 했을 때 전송을 하려고 합니다.
고수님들께 도움을 요청합니다.


도움 요청사항 :
1. procedure TFrmZoneOn.Button1Click(Sender: TObject); 를 실행하게 되면
    List := IdTCPServer1.Threads.LockList;  에 서버 아이피만 나타납니다.
    분명 client 가 연결되어 있는데 연결된 클라이언트 아이피 '192.168.0.3'가 안나타납니다
    클라이언트가 연결될때 스레드가 만들어 지며 클라이언트가 종료 전까지는 계속 스레드가 살아 있는것 아닌가요 ?
    List.Count 해서 보면 값이 1 입니다.

2. 특정 아이피에만 보내는 방법이 있을까요 ?

*=========================================================
procedure TFrmZoneOn.Button1Click(Sender: TObject);
var
  aCount: Integer;
  List : TList;
  aIp : string;
begin

  List := IdTCPServer1.Threads.LockList;

  try
    for aCount := 0 to List.Count -1 do
    begin
        aIp := TIdPeerThread(List.Items[aCount]).Connection.Socket.Binding.IP;
        if aIp='192.168.0.3' then
          TIdPeerThread(List.Items[aCount]).Connection.WriteLn('X');
    end;
  finally
    IdTCPServer1.Threads.UnlockList;
  end;

end;

*===============================================================
아래는 client 에서 보내은 값과 동일한 값이 edit 에 있으면 컬러를 입히는 코디입니다.
맞게 잘 작동합니다.
*===============================================================
procedure TFrmZoneOn.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  stTemp : String;
  List : TList;    // 서버에 연결된 Client 의 List 를 위하여 선언
  I : Integer;
begin

  stTemp := AThread.Connection.ReadLn;

  for I:= 0 to ComponentCount -1 do begin
    if Components[I].ClassName = 'TEdit' then begin
       if stTemp = (Components[I] as TEdit).Text then
         TEdit(Components[i]).Color := clGreen;
    end;
  end;

end;

*==============================================================
아래는 클라이언트의 코딩으로 서버와 연결이 되면 서버에 아이피를 보내줍니다
맞게 잘 작동합니다.
*==============================================================
  if IdTCPClient1.Connected = False then  begin
    IdTCPClient1.Connect;
    IdTCPClient1.WriteLn('192.168.0.3');
  end;
1  COMMENTS
  • Profile
    최용일 2009.11.11 03:28
    오래되서 기억이 가물가물한데요...
    aIp := TIdPeerThread(List.Items[aCount]).Connection.Socket.Binding.IP;
    Binding.IP가 아마도 Binding.PeerIP가 되어야 할겁니다...