您将如何调查以下问题?
在特定服务器上;发送到本地主机上运行的 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 用 Java 编写的简单 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,并且可以发送响应。
目前还不完全清楚导致该问题的原因。