<!--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); 전 이렇게 했습니다.
질문,답변은 글쓸때 선택하고 글을쓰도록 해주시면 감사하겟습니다.
질문하기에 급한 나머지 적지 못할수도 잇으니까여 부탁드립니다
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초 이상 응답없으면 에러