Q&A

  • [질문] Indy TCPClient를 이용한 프로그램중 쓰레드를 사용하지 않고 수신하기..
조건은 쓰레드를 사용해선 안됩니다.

그래서 IdTCPClient를 통해서 데이터를 송신하고(서버쪽에서 데이터 넘어오는거 까진 확인을 했습니다.)
바로 다음에 무한루프를 이용해 데이터를 수신하는 부분을 작업하려 하는데, 영 데이터가 넘어오지 않고 있어,
도움을 요청하고자 합니다. 아래는 제가 코딩한 소스 입니다.

    try
        TCPClient.Connect();
        page := TStringList.Create;
        try
          tmpStr := '';
          TCPClient.InputBuffer.Clear;
          I := TCPClient.InputBuffer.Size;
          TCPClient.WriteLn('test Message[Client]');
          while true do
          begin
            if Pos(#13, tmpStr)>0 then break;
            TCPClient.ReadBuffer(tmpStr[1],I);
            Memo1.Lines.Add(tmpStr);
          end;

        except

        end;
    finally
        TCPClient.Disconnect;
        page.Free;
    end;

-- tmpStr는 String으로 선언하였습니다.

확실한건 서버에서 패킷은 계속 보내줍니다. 허나 Memo1에는 아무것도 찍히지 않고 있네요.
무엇인 문제인지 지식이 짧아 답을 찾을수가 없어, 이렇게 도움을 요청 합니다.
작업환경은 Delphi 6.0, Indy 9.0을 사용 합니다.
수고 하십시요.
2  COMMENTS
  • Profile
    구창민 2009.08.27 20:40
    안녕하세요..
    우선은 데이타 수신이 잘되는지 확인을 위해 인디 데모에 있는 부분처럼
    타이머를 올리시고 데이타 수신이 계속 발생하는지 확인부터 해보시는게 어떨까 싶네요..

    아래는 인디 9 Chat 예제에 있는 클라이언트 수신부분입니다.

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    Com,
    Msg : String;
    begin
    if not IdTcpClient1.Connected then
    exit;

    Msg := IdTCPClient1.ReadLn('', 5); // <- 이 부분이 수신 부분입니다.

    // 이곳에서 수신된 데이타를 출력해보시면 되겠지요..

    if Msg <> '' then
    Msg 출력
    ...

    end;

    그럼.. 즐거운 프로그래밍 하시구요..
  • Profile
    최용일 2009.08.28 07:38
    TCPClient.InputBuffer.Clear;
    I := TCPClient.InputBuffer.Size;

    위 코드에서 I가 0인데... while문에서 I(=0)만큼 읽어오니까... 아무것도 못읽지 않을까 생각되네요...

    TCPClient.ReadBuffer(tmpStr[1],I);