
我正在 Windows 8 上測試一個小腳本,它嘗試在連接埠 80 上取得一個簡單的網頁。10053。
我最初認為是防火牆問題(我正在運行邁克菲),但我不再那麼確定(日誌中沒有任何內容;當我停用防火牆時仍然失敗)。
那我能做些什麼來界定問題呢?例如,如何確定請求是否離開了網卡?
我運行了 Wireshark,它確實向我展示了一個小活動:
(我)同步
(遠程IP)SYN、ACK
(我)確認
(我)RST、ACK
那麼這是否意味著請求確實已發送?
先致謝
答案1
溫索克錯誤10053 =“WSAECONNABORTED”:
SOCKET_ERROR:已建立的連線被主機中的軟體中止。
提到的「軟體」是(最有可能)溫索克本身。
成立這一頁,它有一個很好的簡介,似乎準確地涵蓋了您遇到的情況,因為它可能是您的腳本沒有形成正確的 HTTP 標頭。
HTTP POST 將會傳送到 HTTP 伺服器。
伺服器開始讀取 POST 並注意到 HTTP 請求標頭無效。
它立即發送一個 HTTP 回應(帶有錯誤狀態,可能是 status=400)並關閉連接,而不嘗試繼續讀取即將到來的 HTTP 請求的其餘部分。
同時,客戶端仍然愉快地將 HTTP 請求的其餘部分寫入套接字。 (請記住,TCP/IP 套接字連接需要從兩側關閉。在這種情況下,伺服器已關閉其一側,但客戶端仍在將資料注入半打開的連接中。)
客戶端完成將HTTP POST 寫入到套接字 — 表示資料已緩衝到 Winsock。然後,客戶端應用程式嘗試讀取 HTTP 回應,但無法讀取,因為(WinSock 緩衝的資料)傳出重傳失敗,並且客戶端(Winsock)關閉了套接字連線。即使 HTTP 伺服器發送了回應,它也會遺失並且無法檢索。當嘗試讀取套接字上的 HTTP 回應時,您的應用程式將收到的錯誤是 WSAECONNABORTED。