在 localhost 上執行的 Java HTTP Server 連接被拒絕
您將如何調查以下問題?
在特定伺服器上;發送到在 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,並且可以發送響應。
目前尚不完全清楚,是什麼導致了這個問題。