Q&A

  • indy에서 서버소켓과 연결 실패시..?
<!--CodeS-->
                try
                   IdTCPClient1.Host := su_ServerIP;
                   IdTCPClient1.Port := iu_ServerPort;
                   IdTCPClient1.Connect;
               except
                   on E: EIdSocketError do
                     begin
                       if E.LastError = 10061 then
                       begin
                           StatusBar1.Panels.Items[0].Text := '서버와 연결을 실패했습니다.';
                       end;
                     end;
               end; //try
<!--CodeE-->
이렇게 만들었는데  서버가 켜있지 않은 상태에서 클라이언트를 실행하면 10061에러가 납니다. 왜 에러가 발생하죠? 에러처리 했는데 중간에 서버가 끊어버리면 에러 루틴을 타는데 처음에 실행할때 서버가 실행되어잇지 않으면 다일로그 박스가 나타납니다. 해결방법 없을까요?
      그리고 응답시간을 20초정도 하고싶은데 어떻게 하면되죠?
IdTCPClient1.ReadLn('', IdTimeoutInfinite);  전 이렇게 했습니다.

질문,답변은 글쓸때 선택하고 글을쓰도록 해주시면 감사하겟습니다.
질문하기에 급한 나머지 적지 못할수도 잇으니까여   부탁드립니다
4  COMMENTS
  • Profile
    심재용 2005.02.25 20:30
    <!--CodeS-->
        on E: Exception do begin
           if E.Message = RSStackECONNREFUSED then  
                StatusBar1.Panels.Items[0].Text := '서버와 연결이 거부되었습니다.'
           else
                StatusBar1.Panels.Items[0].Text :=  '서버와 연결을 실패했습니다.';
        end;

    위의 방법을 추천합니다. 이유인즉, 접속할때 실패하는 이유가 여러가지이고, 에러코드 또한 다양합니다. 그런 코드를 다 알고서 예외구문에 포함시키기는 매우 불편할 것입니다. 위와 같은 방법을 사용해서 모든 에러 메시지를 수신하심 될것 같구요. if~ 부분을 함수로 만들어서 사용하시면 다른 곳에서도 사용하기 편하겠죠.

    RSStackECONNREFUSED와 같은 에러 메시지는 Indy 파일 IdResourceStrings 에 들어있습니다

    그리고, 시간을 제안하고자 예제..

    IdTCPClient1.Connect(5000) ;// 5초 이상 응답없으면 에러

    IdTCPClient1.ReadLn('', 20000);  //20초 이상 응답없으면 에러


  • Profile
    델사랑 2005.02.25 22:54
  • Profile
    이중철 2005.02.25 19:11
    EIdSocketError에서 발생하지 않았을꺼에요
    밑에 IdException 에 정의된 Exception들인데 EIdSocketError는 그중 하나이죠
    추측컨데 다른쪽 아닐까요 시간이 없어 테스트는 못해봅니다.
    <!--CodeS-->
      EInvalidSyslogMessage = class(EIdException);
      EIdSSLProtocolReplyError = class(EIdProtocolReplyError);
      EIdConnectTimeout = class(EIdException);
      EIdConnectException = class(EIdException);
      EIdSocksError = class(EIdException);
      EIdSocksRequestFailed = class(EIdSocksError);
      EIdSocksRequestServerFailed = class(EIdSocksError);
      EIdSocksRequestIdentFailed = class(EIdSocksError);
      EIdSocksUnknownError = class(EIdSocksError);
      EIdSocksServerRespondError = class(EIdSocksError);
      EIdSocksAuthMethodError = class(EIdSocksError);
      EIdSocksAuthError = class(EIdSocksError);
      EIdSocksServerGeneralError = class(EIdSocksError);
      EIdSocksServerPermissionError = class (EIdSocksError);
      EIdSocksServerNetUnreachableError = class (EIdSocksError);
      EIdSocksServerHostUnreachableError = class (EIdSocksError);
      EIdSocksServerConnectionRefusedError = class (EIdSocksError);
      EIdSocksServerTTLExpiredError = class (EIdSocksError);
      EIdSocksServerCommandError = class (EIdSocksError);
      EIdSocksServerAddressError = class (EIdSocksError);

      //IdIMAP4 Exception
      EIdConnectionStateError = class(EIdException);

      // THE EDnsResolverError is used so the resolver can repond to only resolver execeptions.
      EIdDnsResolverError = Class(EIdException);

      {Socket exceptions}
      EIdInvalidSocket = class(EIdException);

      EIdSocketError = class(EIdException)
    <--CodeS--!>


  • Profile
    델사랑 2005.02.25 22:55