Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

안드로이드 개발 - 소켓


쌀통닭

질문

안녕하세요.. 델파이 11로 안드로이드 개발을 하고 있습니다.

대략 소스는 아래와 같은데.. 처음 연결 후 데이타 주고 받는건 잘 되는데.. 이상하게 Button1Click을 해서

한번 끊으면 그 후에는 받지를 못합니다. 

IdTCPClient1.Disconnect; 실행 후 CornerButton1Click을 해보면 서버에 잘 들어오고 서버가 리턴을 해주는데

받지를 못합니다.

끊으면 쓰레드가 멈추는건지.. 왜 이런현상이 나타날까요 ?

----------------------------------------------------------------------------------------------------------

procedure TClientHandleThread.HandleInput;
begin
    Form1.Memo1.Lines.Add(PubMsg);
    Form1.CornerButton1.Enabled := True;
end;

procedure TClientHandleThread.Execute;
begin
    while not Terminated do begin
        if Form1.IdTCPClient1.Connected then begin
          try
            Form1.IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
            PubMsg := Form1.IdTCPClient1.IOHandler.ReadLn;
            if not Form1.IdTCPClient1.IOHandler.ReadLnTimedout then begin
                Synchronize(HandleInput);
            end;
          except
          end;
        end;
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
    IdTCPClient1.Disconnect;
end;

procedure TForm1.CornerButton1Click(Sender: TObject);
begin
    CornerButton1.Enabled := False;

    if IdTCPClient1.Connected then begin
        IdTCPClient1.IOHandler.InputBuffer.Clear;
        IdTCPClient1.IOHandler.WriteLn('TestData');
    end else begin
        IdTCPClient1.Host := '111.111.111.111';
        IdTCPClient1.Port := 12345;
      try
        IdTCPClient1.Connect;
      finally
        IdTCPClient1.IOHandler.InputBuffer.Clear;
        IdTCPClient1.IOHandler.WriteLn('TestData');
      end;
    end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
    if Assigned(ClientHandleThread) then ClientHandleThread.Terminate;

    Action := TCloseAction.caFree;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    ClientHandleThread := TClientHandleThread.Create(False);
    ClientHandleThread.FreeOnTerminate := True;
end;

이 댓글 링크
다른 사이트에 공유하기

4 answers to this question

Recommended Posts

  • 0

소스를 보면 커넥트 요청하고 바로 연결되는지 확인하시는데 이렇게 하면 연결되는데 시차가 있기 때문에 바로 확인이 안됩니다.

IdTCPClient1 에 OnConnect 메소드 이벤트가 발생 했을 때  그 안에서 처리를 해보세요.

즉, 커넥트 요청하고 기다리다가 연결되면 OnConnect 메소드가 뜨게 됩니다. 

image.png

 

 

 

이 댓글 링크
다른 사이트에 공유하기

  • 0

답변 감사합니다.

연결은 잘되고 서버와 주고 받는것도 잘 됩니다. 다만 잘 되고 있는 상태에서 Disconnect를 하고

그 후 연결부터 다시 해보면 서버에서 주는 값을 못 받아 옵니다.

같은 소스로 windows환경에서 하면 이상이 없는데.. 안드로이드폰에서 하면 문제가 생깁니다.

Edited by 쌀통닭
이 댓글 링크
다른 사이트에 공유하기

  • 0

마찬가지로 안되네요....

procedure TClientHandleThread.HandleInput;
begin
    Form1.Memo1.Lines.Add(PubMsg);
    Form1.CornerButton1.Enabled := True;
end;

procedure TClientHandleThread.Execute;
begin
    while not Terminated do begin
        if Form1.IdTCPClient1.Connected then begin
          try
            Form1.IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
            PubMsg := Form1.IdTCPClient1.IOHandler.ReadLn;
            Synchronize(HandleInput);
          except
          end;
        end;
    end;
end;

procedure TForm1.CornerButton1Click(Sender: TObject);
begin
    CornerButton1.Enabled := False;

    if IdTCPClient1.Connected then begin
        IdTCPClient1.IOHandler.InputBuffer.Clear;
        IdTCPClient1.IOHandler.WriteLn('TestData');
    end else begin
        IdTCPClient1.Host := '111.111.111.111';
        IdTCPClient1.Port := 12345;

        IdTCPClient1.Connect;
    end;
end;

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
    IdTCPClient1.IOHandler.WriteLn('TestTest');
end;

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.