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;
aIp := TIdPeerThread(List.Items[aCount]).Connection.Socket.Binding.IP;
Binding.IP가 아마도 Binding.PeerIP가 되어야 할겁니다...