Q&A

  • Indy를 사용해서 프로그램 작성중.. . 질문이 있습니다.
안녕 하세요..
Indy를 이용해서 프로그램을 짜는데.. 궁금한 부분이 있어서
이렇게 글을 올립니다.

Indy가 제가 읽기로는 블록킹모드라구 하던데요..
즉, 함수를 호출했을때 그 함수가 모든 동작을 다 수행할때까지
반환하지 않는걸루 알고 있는데요.

제가 클라이언트측에서 서버로 접속을 할려구..
Connect를 호출하였습니다.
여기서 VC는 Connect 호출시에 반환값으로 연결 성공 이나 아니면
에러에 대한 리턴값일 있던데.
Indy의 Connect는 반환값이 존재하지 않더군요.

만일에. Connect호출시에 서버가 존재하지 않을 경우의 처리는
어디서 해야하는지요.
블록킹 모드라면.. Connect가 동작을 수행후에 그 반환값까지
리턴을 해야 할것 같은데..

실패할 경우, 무작정 시스템 에러(?) 메시지를 날려 버리군요.

델파이에 제공되는 (참고로 델파이 5입니다.) Socket을 사용했을 때두.
Connect시 에러가 발생하면, 그에 대한 처리는 OnError라는 곳에서 한다구
하더군요.
그러면서.. 제공되는 Socket은 넌-블록킹 모드라구 읽었던것이 기억이 나서
그럼 그럴수도 있겠다 하구 넘어 갔거든요.
그런데.. Indy에서두.. 이런씩으로 처리를 해야하는건지..

순차적으로 처리를 하고 싶어서 이렇게 글을 올립니다.
제가 Indy를 처음 사용해서 그런지.. 순차적으로 결과값을 얻을 수 있는지요.

그럼 좋은 하루 보내세요.
1  COMMENTS
  • Profile
    srookie 2005.04.22 18:18
    안녕하세요.
    말씀하신 대로 처리를 하시려면, try except 문을 가지고 처리해야 합니다.
    보통 Socket쪽에 문제가 있으면 Exception이 넘어오는데 이걸 캐치 해서 사용하셔도 되구요, 더 자세한 처리를 원하신다면, 상황에 맞는 Exception을 캐치하시면 될것같습니다.  무수한 Exception들이 있으니 이것은 상황에 따라 찾아보시면 금방 찾으실 수 있습니다.
    참고로 저같은 경우는 이런식으로 처리를 하죠. 이렇게 쓰는것이 꼭 정답은 아닙니다. 참고만 하세요. ^^
    <!--CodeS-->
        try
          sktClient.Connect;
          sktClient.Socket.Writeln(strPacket);
          Result := true;
        except
          on E : EIdSocketError do
            Result := false;
        end;
    <!--CodeE-->

    어찌보면 리턴값을 받는것보다 try except문을 사용할 때가 훨씬 유용할 때가 있으니 한번 사용해보시길...
    그럼 즐프하세요~