2013-04-02 36 views
0

我必須檢查某些域的http狀態碼,並且可以使用最小的通信量。只能通過套接字獲取http狀態碼

我決定使用套接字。問題在於系統總是收到完整的頭文件,而不僅僅是20字節。

我該如何減少反應?

這裏是代碼...工作正常

string uri = "www.stackoverflow.com"; 
    var addresses = System.Net.Dns.GetHostAddresses(uri); 
    IPEndPoint hostep = new IPEndPoint(addresses[0], 80); 
    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
    sock.Connect(hostep); 
    if (sock.Connected) 
    { 
     byte[] msg = Encoding.UTF8.GetBytes("HEAD/HTTP/1.1\r\nHost: "+uri+"\r\nConnection: Close\r\n\r\n"); 
     int i = sock.Send(msg,0,msg.Length); 
     byte[] bytes = new byte[20]; 
     i = sock.Receive(bytes); 
     string header = Encoding.ASCII.GetString(bytes); 
     Console.WriteLine(header); 
    } 

感謝每個小的幫助!

+1

爲什麼你需要縮小響應的大小?我不相信你會通過接收數十個而不是幾百個字節來獲得任何速度優勢(兩者都可能適合單個tcp幀)。 – simonc

+0

其關於域的數量。我必須檢查幾百萬個狀態代碼。當標題大約有400-500字節時,1000萬域的下載量爲〜4.6 GByte –

回答

1
i = sock.Receive(bytes, 20); 

然而,這是沒有意義的:電腦最有可能已經收到的TCP數據包的充分反應,而你要做的僅僅是隻讀的系統正緩衝的一部分。

+0

是的,我正在考慮這個問題。我可以強迫他不要下載整個TCP數據包嗎?或者我必須忍受這一點? –

+0

即使可以,也無關緊要:互聯網提供商的硬件將中繼整個TCP數據包並記錄其大小。 –