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

Socket Timeout 발생하지 않는 문제 질문드립니다.

0 추천
안녕하세요?

socket.setSoTimeout 을 29분으로 설정해 놓았습니다.

(테스트 환경은 LTE이며 이동하지 않고 같은 자리에서 테스트 하고 있습니다.)

29분마다 SocketTimeoutException 이 잘 발생하다가 어느 순간부터 발생하지 않습니다.

앱을 다시 실행하던가 서비스를 다시 실행하면 정상적으로 동작합니다..그러다가 어느 순간부터 또 Timeout이 발생하지 않습니다..

timeout이 발생하지 않은 상태에서 29분이 지나 있으면 서버와 소켓은 서로 connect되어 있다고는 하는데(isConnected  같은걸로 체크해 보았습니다, 서버쪽에서는 폰의 ip를 붙잡고 있구요..) 실제로 서버에서 값을 전달하면 통신이 이루어 지지 않습니다.

socket이 먹통이 되는 걸까요?

그렇다면 어떤경우에 이런현상이 발생하는 것인가요?

이걸 방지하려면 어떻게 해야 할까요?
SM21 (780 포인트) 님이 2014년 8월 13일 질문

1개의 답변

0 추천
setSoTimeout은 소켓의 종료가 아니라 InputStream이 종료가 됩니다.

즉 말씀하신데로 29분이 지나도 소켓은 연결되어 있지만 입력을 받을수 없는 상태가 됩니다.

그래서 서버단에서 통신을 보내도 받지 않을듯 합니다.

isConnected를 하셔도 소켓이 끊어진것이 아니라 InputStream만 끊어져있기때문에

아직 연결이 되어있다고 알려주는겁니다.
bellfe0402 (1,770 포인트) 님이 2014년 8월 14일 답변
InputStream 에 try catch를 걸어 놨는데 Exception이 발생되지 않더라구요..InputStream이 끊어지는데 catch가 안되는 것은 왜그런 것일까요?
InputStream에 try catch를 걸어놓았다는 것이 최초 스트림 생성하는 부분에 해놓았다는 말씀이신가요? 어디에 해놓으신건지..;;이해가 안가네요
코드는 아래와 같이 구성되어 있습니다
connect 이후 receive상태로 대기하도록 되어 있는 부분입니다..
try {
     .....
     InputStream is = this.stompSocket.getInputStream();
     DataInputStream dis = new DataInputStream(is);
     dis.readByte();
     .....
}
catch (Exception e) {
     .....
}
...