Q&A

  • IdTCPClient에서의 예외처리
로그인 폼에서 접속 버튼을 누르게 되면

  Id:= eLoginId.Text;
  Pass:=eLoginPass.Text; // ID와 패스워드입니다.

  try        
    frmMain.IdTCPClient1.Connect;
  except
    Application.MessageBox('접속하려는 서버의 IP 주소를 확인하여 주십시오.','오류',MB_OK+MB_ICONSTOP); // 만약에 IP 주소를 잘못 입력하여 소켓 에러가 나면 사용자게에게 안내합니다.
    exit; // 그리고 exit;
  end;

물론 IP와 Port는 다 입력을 해 줍니다.
그런데, IP 주소를 입력하지 않으면, 즉 Ip주소값이 nil일 땐 정상적으로 메시지가 나옵니다.
그리고 잘못 입력한 IP의 네트워크가 살아있을 때에도 메시지가 정상적으로 나옵니다.
그런데 잘못 입력한 IP의 네트워크가 죽어있을 땐 (컴퓨터가 꺼져 있다거나) Connect가 되면서 그대로 끝나버립니다.

그런데 또 웃긴건 IP 주소를 엉터리로 ex)ads.gaweg.32.gagad 이런식으오 영문자 숫자 혼용해서 입력하면 역시 에러 메시지가 나옵니다.

그런데 잘못 입력한 IP의 네트워크가 죽어있을 땐 (컴퓨터가 꺼져 있다거나) Connect가 되면서 그대로 끝나버립니다.

이 상황에서만 무한루프에 빠지는데
고칠 수 없을지..

except 구문으로 넘어가는 것이 아니라 Connect가 되버린다음 이유는 모르겠지만 무한루프에 빠집니다.

이걸 어떻게 해결해야하죠?
1  COMMENTS
  • Profile
    델마니아 2006.08.15 00:45
    혹시 TimeOut 시간대문에 그렇게 느끼는건 아니신지.
    IdTCPClient1.Connect(1000);
    이렇게 해보시면,
    무한 루프인지 금방 알수 있을거 같은데요..
    제 경우는 잘되던데요...