Q&A

  • Indy TCPServer에서 데이타송신 방법에 대해 질문!!
IdTCPServer와 IdTCPClient를 써서 문자열을 송수신하려고
하는데 Indy가 제공하는 예제로는 저의 한계때문에 어려움이 있어
질문드립니다
예제는 IdTCPServer의 execute이벤트로 문자열을 보내는 걸로
되어 있는데 이 이벤트를 쓰지않고
예를 들어 Button1을 클릭했을때 문자열을 발생시키는 것을
구현하고 싶습니다
예제의 이벤트 발생시 아래와 같은 코딩이 가능한데
TCPServerExecute를 쓰지않고 Button1을 클릭하는 방법을 써서
구현하고 싶습니다

procedure TfrmServer.TCPServerExecute(AThread: TIdPeerThread);
begin
with AThread.Connection do
begin
   WriteLn('Hello from Main Server send!!!');
   Disconnect;
end;
end;

procedure TfrmServer.Button1Click(Sender: TObject);
begin
//이 부분에 어떻게 코딩이 되어야합니까? Thread 처리부분이
   아리송합니다
end;


검색해서 찾아봤더니 아래와 같이 비슷한 내용이 있어
테스트해봤는데 잘 안되는군요
procedure Form1.Broadcast;
var
   Index: Integer;
   List: TList;
   Thread: TIdPeerThread;
begin
   if (Thread = nil) then
       Exit;
   try
       List := IdTCPServer1.Threads.LockList;
       for Index := 0 to List.Count - 1 do
       begin
           Thread := TIdPeerThread(List.Items[Index]);
           if (Thread <> nil) then
           begin

               Thread.Connection.WriteLn(.........);

           end;
       end;
   finally
       IdTCPServer1.Threads.UnlockList;
   end;
end;
1  COMMENTS
  • Profile
    박서규 2002.10.25 22:50
    구하신 예제는 많이 쓰는 방법인데....
    아마도 처음에 있는
    if (Thread = nil) then
           Exit;
    이 잘못된것 같구요..

    님께서 원하시는 결과를 얻기위해서는 여러방법이 있습니다..
    예를 들어 클라이언트와 서버간의 특정한 교신(프로토콜)에 의해
    서버의 일정한 장소에 해당 TCP Connection을 저장을 해놓고
    특정한 사람한테 보낸다든가 아님 모두에게 보내는 방법이
    있구요...  물론 그러한 Connection을 저장할려면 Global선언을
    한후에 저장을 해서 필요할때 그 연결로 Write를 하면 되겠죠..