java net sockettimeoutexception connect timed out как исправить
Получение java.сеть.SocketTimeoutException: время ожидания соединения в android
Я относительно новичок в разработке android. Я разрабатываю приложение для android, где я отправляю запрос на веб-сервер и анализирую объекты json. Часто я получаю java.net.SocketTimeoutException: Connection timed out исключение при общении с сервером. Иногда это будет работать совершенно без каких-либо проблем. Я знаю, что этот вопрос задавали много раз. Но все же я не получил удовлетворительного решения этой проблемы. Я отправляю свой код связи logcat и app-server под.
может ли кто-нибудь помочь мне найти решение для этого? Спасибо заранее.
5 ответов
Я искал по всему интернету и после прочтения многих документов, касающихся исключения тайм-аута соединения, я понял, что предотвращение SocketTimeoutException выходит за рамки нашего предела. Один из способов эффективной обработки-определить тайм-аут соединения,а затем обработать его с помощью блока try catch. надеюсь, это поможет любому в будущем, кто сталкивается с той же проблемой.
Я знаю, что этот вопрос немного старый. Но поскольку я наткнулся на это во время исследования, я подумал, что небольшое дополнение может быть полезно.
как указано, ошибка не может быть решена клиентом, так как это проблема, связанная с сетью. Однако вы можете повторить попытку подключения несколько раз. Это может работать как обходной путь, пока реальная проблема не будет исправлена.
возможно, это кому-то помогает.
Если вы тестируете сервер localhost в ваше Android устройство должно быть подключено к той же локальной сети. Затем URL-адрес сервера, используемый вашим приложением, должен включать IP-адрес вашего компьютера, а не маску «localhost».
Я столкнулся с этой проблемой и решение было перезагрузить модем (роутер). После этого я мог бы подключиться к интернету для своего приложения.
Я думаю, что библиотеку я использую не управлять должным образом, поскольку это happeend всего несколько раз.
Ошибка java.net.SocketException: Conection reset — как исправить
Сразу сообщу, что если у вас проблема с игрой майнкрафт, то листайте в самый конец статьи, а пока информация для разработчиков и программистов.
В этом примере мы поговорим о java.net.SocketException. Это подкласс IOException, поэтому это проверенное исключение, которое сигнализирует о проблеме при попытке открыть или получить доступ к сокету.
Настоятельно рекомендуется использовать самый «определенный» класс исключений сокетов, который более точно определяет проблему. Стоит также отметить, что SocketException, выдаётся на экран с сообщением об ошибке, которое очень информативно описывает ситуацию, вызвавшую исключение.
Простое клиент-серверное приложение
Чтобы продемонстрировать это исключение, я собираюсь позаимствовать некоторый код из клиент-серверного приложения, которое есть в java.net.ConnectException. Он состоит из 2 потоков.
Получается, что 2 потока будут в разных классах, запущенных двумя разными основными методами, чтобы вызвать исключение:
Как вы можете видеть, я поместил в SimpleClient 15-секундную задержку, прежде чем попытаться отправить свое сообщение. К тому моменту, когда клиент вызывает sleep(), он уже создал соединение с сервером. Я собираюсь запустить оба потока, и после того, как клиент установит соединение, я внезапно остановлю клиентское приложение.
Вот что происходит на стороне сервера:
Мы получаем исключение SocketException с сообщением «Сброс подключения». Это происходит, когда один из участников принудительно закрывает соединение без использования close().
Конечно, вы можете сделать оперативное закрытие соединения, не закрывая приложение вручную. В коде клиента, после ожидания в течение 15 секунд (или меньше), вы можете выдать новое исключение (используя throws new Exception ()), но вы должны удалить finally, иначе соединение будет нормально закрываться, и SocketException не будет сброшен.
Как решить проблему с SocketException
SocketException — это общее исключение, обозначающее проблему при попытке доступа или открытия Socket. Решение этой проблемы должно быть сделано с особой тщательностью. Вы должны всегда регистрировать сообщение об ошибке, которое сопровождает исключение.
В предыдущем примере мы видели код сообщения. Это происходит, когда один из участников принудительно закрывает соединение без использования close(). Это означает, что вы должны проверить, был ли один из участников неожиданно прерван.
Также может быть сообщение «Слишком много открытых файлов», особенно если вы работаете в Linux. Это сообщение обозначает, что многие файловые дескрипторы открыты для системы. Вы можете избежать этой ошибки, если перейдете в /etc/sysctl.conf и увеличите число в поле fs.file-max. Или попытаться выделить больше стековой памяти.
Конечно, можно встретить много других сообщений. Например, «Ошибка привязки», где ваше соединение не может быть установлено, поскольку порт не может быть привязан к сокету. В этом случае проверьте, используется ли порт и т. д.
Если у вас проблема с minecraft, то чтобы решить проблему попробуйте сделать следующее:
Средняя оценка / 5. Количество голосов:
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
BiTel
Часовой пояс: UTC + 5 часов [ Летнее время ]
java.net.SocketTimeoutException: connect timed out
Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
Проблема с билингом, периодически виснет, перестает отвечать. Если клиент был запущен, выдает сообщение: Если запустить клиент, то read timeout В логах сервера: data.properties: server.sh: Информация о версии: Клиент: вер. 6.0 сборка 1396 от 15.04.2016 23:41:35 card вер. 6.0 сборка 233 от 02.06.2016 15:27:00 Клиент: |
Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6051
Карма: 244
это как-то связано с зависанием или что? в какой момент это в логах появляется всё? возможно он тоже не дождался ответа и закрыл страницу, хотя это странно всё же |
Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
Логи сервера выложил те,что крайние перед зависанием, Сам голову ломаю не первый месяц. |
Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6051
Карма: 244
Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
Вывод top: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6051
Карма: 244
Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
Ух, я даже ведь не подумал так проверить. Клиент отваливается и выдет, java.net.SocketTimeoutException: connect timed out Ок, ждем зависа и проверяем, как только отпишусь. |
Разработчик |
Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6051
Карма: 244
Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
И так, продолжим. в логах увидел интересный момент. может оно: С годик назад, ребята из bitel делали нам дописку в дин код (сам не справился) ru.bitel.tk.NpayDebet import java.math.BigDecimal; import ru.bitel.bgbilling.kernel.event.Event; public class NpayDebet Java: socket read time out exceptionI trying to make a call to a very heavy duty process. It’s average work length is estimated by 9-10 minutes. When I’m executing the process, I set the timeout for a ridiculously huge number: 99999999. After 2 minutes, I get the following error:
I tried to mess with it some more, and I set the timeout to 3000, and after 3 seconds as anticipated I got the same error. Do you have any idea on why socket.setSoTimeout(99999999) sets it to 120000 max? 3 Answers 3I had the same problem and the solution was not use socket.shutdownInput(); socket.shutDownOutput(); until the last time of reading or writing data to the socket. This made the socket go to FIN_WAIT state thus waiting 2 minutes before closing. You can read more about it in this post Clearly you aren’t setting the timeout you think you’re setting, or someone else is changing it afterwards. You’ll have to post some code to get further elucidation. Note that according to W.R. Stevens in TCP/IP Illustrated, Vol II, #17.4, the timeout is held in a short as a number of 1000Hz ticks, so a timeout beyond 11 minutes isn’t possible. This applies to the BSD code. I’m not sure how your application works, but try to set an infinite timeout to the socket If you provide more information about your call, i may improve the answer. what causes : java.net.SocketException: Connection timed out, Not the SocketTimeoutExceptionThis SocketException is thrown in ObjectInputStream.readObject() method, what cause this excetpion? Besides, the values of soTimeout of client and server socket are both 0, and KeepAlive value is false. From the JAVA API document about the setSoTimeout method, if this method is set a no-zero value, when the times expires, only the SocketTimeoutException was thrown, not the SocketException:Connection timed out, so, this exception should not relate with the setSotimeoutMethod. However, the value returned by PlainSocketImpl(here,is SSLSocketImpl).getTimeout() is transfered by the setSoTimeout() method, then it is still a very strange method. 1 Answer 1java.net.SocketException: the Connection timed out exception is not related with setTimeout method, which only is related with the SocketTimedoutException. From the messages traces captured by tcpdump, like below: while this logs throw the java.net.SocketException: Connection timed out at 22:54, about 15minutes later from the writeObject invoked. So we can conclude that this Exception is caused by that possibly the tcp connection has been not usable because of a long time(about 30minutes) no traffic, meanwhile there is no socket.close() method invoked to close the socket at instance, then this exception was thrown. so to avoid this exception, you should keep the connection be alive using the method Socket.setKeepAlive() method although possibly you have not used the method setTimeout(), meaning asking the socket to unlimited block to receive; Or apply the heart-beat mechanism in your applications.
|