2013-04-02 4 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 байт, трафик загрузки для 10 миллионов доменов составляет ~ 4,6 GByte –

ответ

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

Однако, это бессмысленно: компьютер, скорее всего, уже получил TCP-пакет с полным ответом, и все, что вам сделать, это просто прочитать только часть буфера Sytem.

+0

Да, я думал об этом. Могу ли я заставить его не загружать весь TCP-пакет? Или мне нужно жить с этим? –

+0

Даже если бы вы могли, это не имело бы значения: аппаратное обеспечение интернет-провайдера передало бы весь TCP-пакет и запишет его размер. –

Смежные вопросы