2012-07-27 3 views
1

서버에서 일부 이미지 파일을 읽고 소켓 프로그래밍을 사용하려고합니다.파일을 사용할 수 없을 때 InputStream throw SocketTimeOutException을 읽을 때

하지만 파일이 없으면 socketTimeOut 예외가 발생합니다. 뿐만 아니라 서버 연결이 끊어졌습니다.

파일이없는 경우 어떻게 서버에 대한 연결이 끊어지지 않도록 할 수 있습니까?

InputStream inputStream = new BufferedInputStream(socket().getInputStream()); 

int i = -1; 
while ((i = bufferedInputStream.read()) != -1) { 
byteArrayOutputStream.write(i); 
} 

위 코드에서 bufferedInputStream에서 read()를 호출하면 예외가 발생합니다. 이 예외를 처리하고 서버와의 연결을 끊을 수있는 방법은 무엇입니까?

감사합니다.

답변

1

'파일이 존재하지 않는 경우'예외는 없습니다. 읽기 제한 시간을 설정하고 제한 시간 내에 데이터가 도착하지 않은 경우, 시간 초과가 너무 짧으면이를 가져옵니다. 영원히 기다리고 싶다면 제거하십시오. 너의 타임 아웃이야. 너는 그것을 세웠다.

SocketTimeoutException이 발생하면 연결이 끊어지지 않습니다. 네가 왜 그렇게 생각하니?

+0

이 게시물은 어디에서, 왜 내가 예외를 얻는지를 도왔습니다. 감사. – Upendra

+0

예외가 끝난 후 연결이 닫히지 않거나 처리되지 않으면 스트림 정리를 처리해야합니다. 스트림을 클로우즈하고 있지 않는 경우, 소켓에 바인드 된 스트림이 존재합니다. 소켓을 닫으면 소켓과 연결된 스트림이 내부적으로 닫힙니다. 내 자바 기술은 매우 가난합니다. 내가 틀린 곳에서 나를 교정 해주세요. – Upendra

+0

@Upendra 무슨 말씀 이세요? 나는 '물줄기 청소'에 관해 아무것도 말하지 않았다. 아무것도 닫지 말고 시간 제한을 메모하고, 계산 한 다음 다시 시도하십시오. 너무 많은 타임 아웃이 발생하거나 read()가 -1을 반환하거나 다른 IOException이 발생하는 경우 소켓을 닫거나 출력 스트림을 감싸는 경우 더 나은 출력 스트림을 생성하는 것이 좋습니다. 소켓을 닫으면 스트림이 닫히고 그 반대의 경우도 마찬가지입니다. – EJP

관련 문제