2009-04-07 16 views
0

관련 게시물이 내 질문에 대답하지 않았습니다.Java에서 서버의 연결이 끊어졌습니다.

EVERY TWO SECONDS DO: 
if the inputstream is not null { 
    if inputStream.available() is 0 
    { 
      return 
    } 
    print "handling input stream" 
    handleTheInputStream(); 
} 

심지어 내 클라이언트 연결 해제 후, 서버는 IOException을 통해 그것을 인식하지 않습니다

내가 좋아하는 일을 수행하는 서버가 있습니다. 다른 포스트에서는 End-of-Stream 문자를 보게 될 것이라고했습니다. 그러나 클라이언트가 연결을 끊은 후에는 데이터를 사용할 수 없음을 나타내는 "입력 스트림 처리"가 표시되지 않기 때문에 그렇지 않습니다.

아마 내가 현재 어떻게 작동하는지 이해하는 방식에 문제가있을 수 있습니다.

도와주세요.

+0

의사 코드가 손상된 것 같습니다. 입력 스트림이 null 인 경우 inputStream.available()이 NPE를 throw합니다. –

+0

감사합니다. "inputstream이 null이 아니며 AND ..."라고 가정합니다. – jbu

+0

현재 분기가 잘못되었다고 의심되는 경우 ... 입력 스트림이 null이거나 데이터가없는 경우 왜 처리해야합니까? ? –

답변

3

는 사용하지 마십시오 available()- 미래에 사용할 수있는 데이터가있을 것입니다 여부, 현재 데이터를 사용할 수있다 여부를 말한다. 즉, 단절을 감지하는 것은 잘못된 도구입니다.

기본적으로 read() (및 데이터 처리)을 호출하여 -1이 반환 될 때까지 클라이언트가 연결을 끊었 음을 의미합니다.

+0

클라이언트가 연결을 끊으면 -1이 반환됩니다. – andri

+0

문제는 내가 작성하지 않았기 때문에 서버의 기존 코드를 변경하고 싶지 않다는 것입니다. 나는 그것을 바꿀 수는 있지만 변화를 요구하기 전에 그것을 할 수있는 다른 방법이 없다는 것을 알고 싶다. 변화를 위해서는 많은 회귀 테스트가 필요합니다. – jbu

+0

@andri : 고마워요. –

1

소켓을 사용하여 완료하면 isClosed() 또는 isInputShutdown()과 같은 Socket 클래스의 다양한 인스턴스 메서드를 확인할 수 있습니다.

물론,이 스트림에서 작동하는 메서드는 InputStream뿐 아니라 Socket 객체에 액세스 할 수 있다고 가정합니다.

관련 문제