2016-08-26 1 views
0

Когда я пытаюсь отправить данные на затянувшееся соединение, он не приходит на сервер и не обнаруживает ошибок в записи. Это относится и к системе сердечного ритма.
У меня работает система полу-сердцебиения. Дело в том, чтобы проверить ошибку «out», если это произойдет, но это никогда не происходит. У меня есть setKeepAlive для приложения и сервера, я проверяю out.checkError(), ничто не обнаруживает затяжное соединение.
С или без сохранения происходит то же самое.
Оправа Создание (происходит в потоке):Java/Android Мертвое соединение не обнаружено

  Socket socket = new Socket(serverAddr, port); 
      socket.setKeepAlive(true); 

Heart Beat System (также резьбовой):

public void heartbeat(){ 
    new Thread(new Runnable() { 
     public void run() { 
      while(connected == true){ 
       try{ 
        Thread.sleep(120000); 
       }catch (Exception e){ 
       } 
       handlerObject.sendMessage(String.valueOf((char) 1)); 
      } 
     } 
    }).start(); 
} 

Отправить сообщение определяются как:

 public void sendMessage(String data){ 
      try { 
       PrintWriter out = new PrintWriter(socket.getOutputStream());//, true); 
       out.println(data + "\r\n"); 
       out.flush(); 
       if(out.checkError()) { 
        socket.close(); 
       } 
      }catch (Exception e){ 
       try{ 
        socket.close(); 
       } catch (Exception z){ 

      } 
     } 
    } 

ответ

0

Я мог бы быть брандмауэр, блокирующий трафик на сервере, пожалуйста, проверьте, отключив брандмауэр на сервере или добавив соответствующее правило (поскольку вы не сталкиваетесь с ошибкой, поэтому может быть, что блок брандмауэра)

+0

Это не так. Соединение работает нормально. Он просто в конечном итоге становится невосприимчивым, и на стороне приложения не возникают ошибки. – TheMoop456

0

Решением здесь было использование socket.setSoTimeout (миллисекунды); и сервер посылает сердечный ритм за несколько секунд до этого. Если клиент не получает пульс до этого, он будет тайм-аут. Теперь я могу поймать это исключение и снова подключиться.

Смежные вопросы