Назад | Перейти на главную страницу

В соединении отказано для Java HTTP Server, запущенного на localhost

Как бы вы исследовали следующую проблему?

На определенном сервере; любые HTTP-запросы, отправленные на сервер Java, работающий на локальном хосте, терпят неудачу с сообщением «Соединение отклонено». (См. Код Java здесь)

В Java Server-Application никаких признаков проблем не видно. Кажется, что порт слушает, но когда я пытаюсь отправить HTTP-запрос с cURL в приложение Java HTTP-Server; cURL регистрирует «В соединении отказано». (Я использую завиток в Mingw в системе Windows 10)

Запущенное приложение Java Server:

C:\test>java LogTCP_S 8000

Listening on port:8000, type Crtl-C to finish

Команда curl [NOK]:

$ curl localhost:8000
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0

 curl: (7) Failed to connect to localhost port 8000: Connection refused

На моей рабочей станции работает тот же код Java, что и ожидалось.

Я также пробовал другое приложение Java. Я получил тот же результат, используя код из следующего ответа от StackOverflow: простой HTTP-сервер на Java с использованием только Java SE API

Проблема возникает в системе Windows 10. Существует несколько инструментов для обнаружения аномалий и приложений брандмауэра, и нам трудно определить источник проблемы.

Подсказка: netstat -a не отображает порт 8000. Но на самом деле он должен отображаться как LISTENING.

Подсказка: При запуске сервера в PowerShell (как описано здесь), связь работает должным образом. Порт PowerShell Server будет указан в выходных данных netstat -a, а запросы вернут HTTP 200 и ожидаемое содержимое.

Не могли бы вы подсказать, как отладить, исследовать или решить эту проблему? Какие инструменты могут быть полезны при исследовании таких проблем?

Любая помощь будет принята с благодарностью.

Большое спасибо.

Версия Java:

C:\>java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Вывод сервера PowerShell:

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.


PS C:\Temp\_test\PowerShell> .\server.ps1
[PowerShell] Listening at http://localhost:8000/... (port 8000)

> http://localhost:8000/ola
< 200

curl, когда работает PowerShell [OK]:

$ curl localhost:8000/ola
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    38  100    38    0     0    612      0 --:--:-- --:--:-- --:--:--   612

<html><body>Hello world!</body></html>

После выполнения следующих шагов; проблема больше не воспроизводилась:

  • Остановлен сервис Symantec Anti-Virus
  • Переустановил Java JDK 8 u 171

После перезапуска службы Symantec Anti-Virus; проблема все еще не воспроизводится, и проблема, кажется, решена.

Теперь порты, которые открываются приложениями Java, появляются в выводе «netstat -a», и они также отвечают ожидаемым образом. HTTP-запросы, отправленные в приложение Java, теперь поступают в JVM, и ответы могут быть отправлены.

До сих пор не совсем ясно, что вызвало проблему.