Windows

在 localhost 上執行的 Java HTTP Server 連接被拒絕

  • October 23, 2018

您將如何調查以下問題?

在特定伺服器上;發送到在 localhost 上執行的 Java 伺服器的任何 HTTP 請求都會失敗,並顯示“連接被拒絕”。(請參閱此處的 Java 程式碼

在 Java Server-Application 中看不到任何問題的跡象。該埠似乎正在偵聽,但是當我嘗試使用 cURL 向 Java HTTP-Server 應用程序發送 HTTP 請求時;cURL 記錄“連接被拒絕”。(我在 Windows 10 系統的mingw中使用 curl )

啟動的 Java Server 應用程序:

C:\test>java LogTCP_S 8000

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

捲曲命令$$ 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 程式碼在我的 Workstation 上按預期工作。

我也嘗試過不同的 Java 應用程序。我使用 StackOverflow 的以下答案中的程式碼得到了相同的結果:simple HTTP server in Java using only Java SE API

該問題發生在 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>

執行以下步驟後;該問題不再可重現:

  • 停止了 Symantec Anti-Virus 服務
  • 重新安裝Java JDK 8 u 171

重新啟動 Symantec Anti-Virus 服務後;該問題仍然無法重現,問題似乎已解決。

現在,由 Java 應用程序打開的埠出現在“netstat -a”的輸出中,並且它們也按預期響應。發送到 Java 應用程序的 HTTP 請求現在到達 JVM,並且可以發送響應。

目前尚不完全清楚,是什麼導致了這個問題。

引用自:https://serverfault.com/questions/936276