本地主机上运行的 Java HTTP Server 的连接被拒绝

本地主机上运行的 Java HTTP Server 的连接被拒绝

您将如何调查以下问题?

在特定服务器上;发送到本地主机上运行的 Java 服务器的任何 HTTP 请求都会失败并显示“连接被拒绝”。(请参阅此处的 Java 代码

在 Java 服务器应用程序中,没有看到任何问题的迹象。端口似乎正在监听,但是当我尝试使用 cURL 向 Java HTTP 服务器应用程序发送 HTTP 请求时,cURL 会记录“连接被拒绝”。(我在明伟在Windows 10系统上)

已启动的 Java 服务器应用程序:

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 中以下答案中的代码,我得到了相同的结果:仅使用 Java SE API 用 Ja​​va 编写的简单 HTTP 服务器

此问题发生在 Windows 10 系统上。有多种异常检测工具和防火墙应用程序,我们很难确定问题的根源。

暗示:netstat -a 不会列出端口 8000。但它实际上应该显示为 LISTENING。

暗示:在 PowerShell 中启动服务器时(如这里所述),通信按预期工作。 PowerShell 服务器的端口将列在 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>

答案1

执行以下步骤后,问题不再重现:

  • 停止 Symantec Anti-Virus 服务
  • 重新安装 Java JDK 8 u 171

重新启动 Symantec Anti-Virus 服务后,问题仍然无法重现,问题似乎已得到解决。

现在,Java 应用程序打开的端口出现在“netstat -a”的输出中,并且它们也按预期响应。发送到 Java 应用程序的 HTTP 请求现在到达 JVM,并且可以发送响应。

目前还不完全清楚导致该问题的原因。

相关内容