#java #sockets #outputstream #dataoutputstream #connection-reset
Вопрос:
Я должен попросить вас о любезной помощи в решении проблемы, которую я не могу решить… У меня есть следующий код:
String https_url = "https://...";
try {
HttpsURLConnection connection = (HttpsURLConnection) new URL(https_url).openConnection();
String query = "api_key=1234amp;portal_id=1234amp;username=" username;
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Length", String.valueOf(query.length()));
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
DataOutputStream output = new DataOutputStream(connection.getOutputStream());
output.writeBytes(query);
output.close();
DataInputStream input = new DataInputStream( connection.getInputStream() );
String ret = "";
for( int c = input.read(); c != -1; c = input.read() ) {
ret = (char)c ;
}
input.close();
int code = connection .getResponseCode();
String message = connection .getResponseMessage();
System.out.println("Resp Code:" code);
System.out.println("Resp Message:" message);
//...
Этот код работает уже пару лет, и еще несколько недель назад он работал нормально, а затем внезапно он начал получать
исключение java.net.SocketException: Сброс подключения
вскоре после линии
вывод = новый поток вывода данных(connection.getOutputStream());
Этот код запускается в веб-приложении Java и вызывается после нажатия кнопки на веб-странице.
Я не знаю, изменилось ли что-то на стороне сервера, но странно то, что если я помещу этот код в основной метод отдельного класса, экспортирую класс в исполняемый файл jar и запускаю jar из той же среды, в которой развернуто веб-приложение, этот код все еще работает, и я не получаю никаких исключений.
Есть какие-нибудь предложения? Еще раз спасибо вам
Шаг
Комментарии:
1. Хотя сброс соединения является ненормальным, это не то, что я бы назвал редкостью. Это может быть вызвано сбоями в сети или проблемами с сервером. Если у вас его не было много лет, вам очень повезло.
2. прежде всего, спасибо вам за ответ. Я не знаю, было ли у меня какое-либо сброшенное соединение за эти годы, но наверняка до нескольких недель назад этого никогда или почти никогда не случалось. Теперь это всегда происходит из веб-приложения…
3. Понял. На моем месте я бы использовал инструменты сетевого анализа, такие как, например, wireshark, запуск java с включенным выводом сетевой отладки и т. Д. чтобы увидеть, чем отличаются два способа, которыми вы пытались использовать код для подключения.
4. Дополнительные сведения об отладке сетевых проблем java см. в обсуждении свойства javax.net.debug .