마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

소켓 연결 끊김 감지.

0 추천

서버소켓과,  모바일장치( 클라이언트 소켓) 이 연결 되어 실시간 채팅처럼 구현을 하려고 합니다.

서버에서 보낸 메시지는 인풋스트림에 들어온 바이트가 0보다 크면 그 크기만큼 버퍼에 담아서 구현 하였습니다.

 

while(true) {

    if( is.available() == 0 ) continue;

    byte[] buffer = new byte[is.available()];

    is.read( buffer , 0 ,is.available() );

  ... more code

} 

그런데 저렇게 했더니.. 서버에서 소켓을 끊어버린것을 클라이언트가 알지를 못합니다.

검색을 좀 해봤더니, InputSteam.read() 메서드는 소켓이 끊어지면 -1 을 리턴한다고 합니다.

 

 
int value = 0;
while( true ) {
	value = is.read();
	if(value == -1 ) {
		return;//연결끊김.
	}
	//value값을 버퍼에 담고 계속 read 함.
}

 

연결끊김을 감지 하기 위해 저렇게 한바이트씩 읽는게 맞는건지 모르겠습니다.

여러분들은 소켓에 들어온 정보를 어떻게 처리 하시나요?

소켓의 연결 끊김은 어떻게 감지 하시나요?

 

도움부탁드립니다.

 

 

 

 

박봉배 (730 포인트) 님이 2015년 4월 30일 질문

1개의 답변

0 추천
 
채택된 답변
서버상의 문제로 소켓이 끊어지면 클라이언트는

is.read() 의 값이 -1 또는 is.readLine() 의 값이 null 로 리턴 되거나 IOException이 발생됩니다.

위와 같이 처리하시면 될 듯 하네여
Gradler (109,780 포인트) 님이 2015년 4월 30일 답변
박봉배님이 2015년 5월 6일 채택됨
자바가 서툴러서 어떻게 해야 할지 몰랐는데
답변 감사합니다 ^^
...