#java #sockets #pop3
#java #сокеты #pop3
Вопрос:
У меня есть следующий код, который считывает ответ с POP-сервера через сокеты в Java. Но проблема иногда заключается в том, что когда я использую функцию readLine() для чтения с сервера, и если сервер не отвечает никаким ответом, мое приложение зависает там, ожидая ответа от сервера.
socket.connect(new InetSocketAddress("pop.server.com", 110), 3000);
input = socket.getInputStream();
BufferedReader incoming = new BufferedReader(new InputStreamReader(input));
incoming.readLine(); //This line will cause my application to hang if the server does not respond with a reply
Есть ли способ установить тайм-аут или какие-либо другие способы, чтобы, когда сервер не отвечает через определенное время, приложение должно перестать ждать ответа и продолжить другое выполнение?
Комментарии:
1. Почему вы не используете Javamail?
Ответ №1:
Я предлагаю вам попробовать Socket.setSoTime(тайм-аут)
Комментарии:
1. Однако это не приводит к таймауту при чтении всей строки. Что, если клиент продолжает отправлять байты, но никогда не заканчивает строку??
2. @grom Это риск. Клиент всегда может отправить вам бесконечные данные, которые вызывают ошибку нехватки памяти. Если вам нужна пользовательская обработка, вы должны написать код самостоятельно.
3. @grom Вы можете использовать Read() в своем собственном цикле while. Этот метод считывает только один символ. Если вы объедините это с таймаутом, вы сможете делать то, что хотите. Не совсем то же самое, что «написать код самостоятельно» 🙂