Проблема:Sockets прекратить отправку сообщений, но не таймаут
Я делаю приложение, которое имеет мгновенный обмен сообщениями. По большей части сообщения отправляются и принимаются без каких-либо проблем. Но через некоторое время, где-то между 10 и 40 минутами, сообщения больше не доходят до сервера, если сокет клиента не использовался некоторое время. Например, если я общаюсь с кем-то, оставлю приложение открытым, вздремнуть и снова вернуться в чат, тогда сообщения не будут отправляться. Я на 99% уверен, что это не проблема на стороне сервера, потому что я распечатываю все, что он получает (и он ничего не получает), и он отлично работает, если я вхожу в систему с другим телефоном.
Что я пробовал:
Сначала я думал, что это был вопрос времени ожидания на стороне клиента, так как на стороне сервера, я продолжал получать говоря об ошибке, «сброс соединения по равному», где-то в что инвервал 10-40 минут. Я (почти) решить это с помощью Java.net.socket
«s connect()
метода со значением таймаута 0, что дает бесконечное время ожидания:
clientSocket = new Socket();
clientSocket.connect(new InetSocketAddress(ServerInfo.IP, ServerInfo.PORT_NUMBER), 0);
Я редко получаю„сброс соединения пэра“сообщение об ошибке теперь, но загадочная проблема сообщений, которые не отправляются через некоторое время, остается.
Код:
Это моя sendMessage
функция, которая всегда регистрирует "SOCKET ОПЕРАТОРА ОТПРАВКИ СООБЩЕНИЕ:" сообщение":
public boolean sendMessage(String message)
{
PrintWriter out = null;
try
{
out = new PrintWriter(clientSocket.getOutputStream(), true);
Log.i("MY_TAG", "SOCKET OPERATOR SENDING MESSAGE: " + message);
}
catch (IOException e)
{
e.printStackTrace();
Log.i("MY_TAG", "SOCKET OPERATOR FAILEDD TO SEND MESSAGE WITH EXCEPTION: " + e.getMessage());
return false;
}
out.println(message);
return true;
}
Вопрос:
Что на земле может возможно, это проблема или как я могу ее отладить?
Ничего себе, я не понимал, что проблема заключается именно в том, что PrintWriter скрывает исключения ввода-вывода. Я думаю, что это, скорее всего, проблема. (Хотя я не желаю удалять функцию сердечного ритма и ждать полчаса, чтобы проверить). Спасибо. Я обязательно буду следовать всем вашим советам. – Kacy
О, но что вы подозреваете, вызвало падение связи в первую очередь? Я установил бесконечный тайм-аут на стороне клиента. Было ли это серверной стороной, хотя на полчаса продолжалось работать? – Kacy
Не знаю, извините, может быть тайм-аут отображения NAT, как вы предполагали. – EJP