Почему я получаю SocketException в долго работающем приложении? - PullRequest
1 голос
/ 16 мая 2011

Я написал приложение сервера сокетов Java, которое выдает ошибку, если я запускаю его долгое время, скажем 4-8 часов, ниже приведен список ошибок, которые я получаю:

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:130)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:153)
        at java.io.BufferedReader.readLine(BufferedReader.java:316)
        at java.io.BufferedReader.readLine(BufferedReader.java:379)
        at LiveRate.processData(LiveRate.java:224)
        at LiveRate.mainLiveRate(LiveRate.java:265)
        at LiveRate.liveRate(LiveRate.java:126)
        at LiveRate.run(LiveRate.java:119)
        at java.lang.Thread.run(Thread.java:636)

Моё приложение сокетов читаетнекоторые значения с другого сервера TCP / IP и временно сохраняет это значение и предлагает то же самое для другого клиента. Не уверен, что эти ошибки вызваны перегруженностью системы или проблемами с памятью. Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

Вероятно, это не связано ни с нагрузкой, ни с памятью. Вместо этого, более вероятно, будет одно из следующего:

  • удаленная служба закрывается / переходит и регулярно перезапускается,

  • удаленная служба решила закрыть свой конец соединения, потому что она "простаивает",

  • сетевое подключение прерывистое, и вы время от времени сталкиваетесь с перебоями или вызванным перегрузкой, которые слишком велики,

  • вы используете NAT или аналогичный, а номер порта, который использовался для соединения, был восстановлен шлюзом NAT, или

  • что-то обеспечивает соблюдение некоторой политики в отношении слишком длинных открытых соединений TCP / IP.


Суть в том, что ваше клиентское программное обеспечение должно быть в состоянии справиться с потерянными соединениями, если вы хотите работать в течение продолжительных периодов времени. Так работает интернет.

0 голосов
/ 16 мая 2011

Я бы сказал, это потому, что ваш интернет-провайдер сбрасывает ваше соединение каждые 24 часа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...