인디9 TCP통신서버와 복수의 클라이언트 통신에 있어
1. 각각의 클라이언트의 요청에 대해 서버에서 응답은 하는데,
2. 클라이언트의 요청이 없을 때 서버에 접속되어 있는 복수의 클라이언트 중 선택해서
통신은 어떻게 하는지 방법이 없나요?
(아래코드를 보면 서버에서 AThread.Connection.WriteLn('')으로 응답을 해야하는데
클라이언트 선택부분이 없는 것 같아요.)
procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
Command : String;
begin
Command := AThread.Connection.ReadLn;
Command := uppercase(Command);
if Command = 'TIME' then
AThread.Connection.WriteLn(FormatDateTime('hh:nn:ss',now))
else if Command = 'DATE' then
AThread.Connection.WriteLn(FormatDateTime('dd/mmm/yyyy',date))
else if Command = 'TICKCOUNT' then
AThread.Connection.WriteInteger(GetTickCount)
else if Command = 'QUIT' then
begin
AThread.Connection.WriteLn('Goodbye!');
AThread.Connection.Disconnect;
end
else AThread.Connection.WriteLn('Command not recognised - try again!')
end;
=끝=
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
ClientList : TList;
IdPeerThread : TIdPeerThread;
ClientHost : string;
ClientPort : integer;
begin
ClientList := IdTCPServer1.Threads.LockList;
for i := 0 to ClientList.Count - 1 do
begin
IdPeerThread := TIdPeerThread(ClientList.Items[i]);
ClientHost := IdPeerThread.Connection.Socket.Binding.PeerIP;
ClientPort := IdPeerThread.Connection.Socket.Binding.PeerPort;
//클라이언트의 IP와 Port를 알고 있으므로 이를 가지고 선택해서
//통신이 가능합니다.
end;
IdTCPServer1.Threads.UnlockList;
end;
<!--CodeE-->
직접 확인은 안 해봤지만.. 될 겁니다... -_-;;;