|
저번에 똑같은 답변을 해드린적 있는데.. 혹시 못보셨나 해서.. 다시 올립니다..
소켓에서의 에러는 보통 OnError에서 모두 발생합니다.
OnError이벤트에서 아래와 같이..
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode = 0;
}
//---------------------------------------------------------------------------
이렇게 설정해 주시면.. 소켓에 관한 모든 에러가 무시됩니다. 따로 별도의 처리를 해주시려면, ErrorCode를 보시고 그 해당 에러에 대한 처리를 해주시면 되겠지요.
그리고 안전(?)을 위해 OnDisconnect 이벤트에서도 모든 것을 초기화 시키고, Disconnect 상태로 만들어 주는 역할도 좋겠지요.
이런 간단한 문제가 아니었나요? -_-a
참새 님이 쓰신 글 :
:
: 소켓을 사용해 서버에 접속하여 관련 정보를
: 받아서 표시해 주는 프로그램을 작성하였습니다.
: 그런데 문제가 있습니다. 서버가 혹 잘못된 데이타를
: 보내거나 서버와의 접속이 끊어지면 소켓이 포인터를
: 벗어난 곳에 쓰기를 시도하였다는 메시지가 자꾸 나옵니다.
: 서버와의 접속이 끊어지면 계속해서 접속시도를 하기
: 때문에 이런 메시지는 보이지 않았으면 합니다.
: 그리고 서버와의 접속이 끊어지거나 잘못된 데이타는
: 그냥 버리도록 하는 방법이 없을까요?
: 글을 읽어보니까 try, catch, exception, finally 등을 이용하면
: 될 것 같은데 제가 보고 이해할 만한 예제가 없어서
: 처리가 안되고 있습니다.
: 참고로 넌블록킹소켓을 사용했을 때 자꾸만 어싱크 소켓에러가
: 발생해서 그냥 블럭킹 소켓을 사용하고 있습니다.
: 글을 보면 넌블럭킹소켓이 좋을 것 같은데 자꾸만
: 에러 메시지가 나와서 그냥 편하게 블럭킹 소켓으로
: 설정했습니다. 이 두가지의 차이를 알았으면 좋겠습니다.
: 그리고 앞에서 말씀드린 에러 메시지의 처리에 대한
: 조언을 부탁드립니다. 가능하시면 작은 예제나 혹은
: 헤더파일에 어떤 함수를 어디에 추가해야 하는 지 등에
: 대한 자세한 설명 부탁드립니다. 그럼 새로운 한주도
: 행복하세요..
|