2015-02-24 82 views
-2

我在嘗試驗證網站是否啓動。我使用TcpClient撥打網站,它工作正常,但是當我使用webrequest爲同一網站它會引發404錯誤。Tcpclient和webRequest的區別

TcpClient和webRequest的功能有什麼不同?

var client = new TcpClient(); 
client.Connect("android.clients.google.com", 80); 

var request = WebRequest.Create("http://android.clients.google.com"); 
var resp = request.GetResponse(); 
+1

在TcpClient上,你只是連接到服務器,而不是檢索請求的頁面內容,而第二次你得到的內容。當你閱讀TcpClient的流時,你會得到什麼? – Prix 2015-02-24 12:30:06

+1

你是什麼意思,它工作正常?您的TcpClient代碼永遠不會嘗試發出GET命令。 WebRequest建立連接,發送GET請求並處理結果。 WebRequest實際上使用TcpClient來發出請求 – 2015-02-24 12:30:32

回答

4

是什麼TcpClient的和的WebRequest的功能區別?

A TcpClient是TCP客戶端套接字的一個包裝,可讓您與任何TCP服務器進行通信。用於與該服務器通信的application protocol將由您的代碼實現。您的代碼僅連接到HTTP服務器,但不與其通信。

HttpWebRequest不僅處理TCP層,而且處理HTTP layer。這使您可以對任何HTTP服務器執行Web請求。您的代碼執行GET請求http://android.clients.google.com,其中doesn't exist,因此您收到404

爲了解決您的初始問題:Web服務器響應給定端口上的套接字連接或甚至返回HTTP響應的事實可能會或可能不會意味着該站點被視爲「啓動」,並且獲得200響應。是否收到Twitter's "failwhale"表示該網站是「up」?取決於你實際嘗試做什麼,可能需要不同的方法。有時候最好是發起你想要的請求,而不是事先「ping」這個站點。

0

404錯誤測量表明Web服務器在線,但沒有這樣的文件。錯誤是由Web服務器返回的,而不是在客戶端。換句話說,測試是可以的。使用真正離線的Web服務器檢查狀態 - 必須獲得連接超時,端口關閉或類似的狀態。無論如何,爲了這個目的,最好使用TcpClient。