Чтение из сокета
От: Ruweb  
Дата: 11.02.07 03:13
Оценка:
Всем привет!
У меня следующая проблема..: получаю страницу, а в ней какие то левый байты появляются, мне сказали, что нужно нуль добавлять после recv, добавил..но не помогло.., в чем проблема, подскажите пожалуйста..вот код:
    char *header = "GET / HTTP/1.1\r\nAccept-Language: ru\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MRA 4.8 (build 01709))\r\nhost: yandex.ru\r\nConnection: Keep-Alive\r\n\r\n";
    char h[50000];
    int se, re, index = 0;
    
    se = send(s, header, strlen(header), 0);
    
    while(re = recv(s, &h[index], 1024, 0)) 
    {
        index += re;
        h[index] =0;
    }



11.02.07 10:47: Перенесено модератором из 'C/C++' — Odi$$ey
Re: Чтение из сокета
От: Ruweb  
Дата: 11.02.07 03:27
Оценка:
se = send(s, header, strlen(header), 0);

а в send строку нужно передавать с нулём?
т.е.если я сделаю так: se = send(s, header, strlen(header)-1, 0);
то это будет работать, но правильно ли?
Re: Чтение из сокета
От: deadem Россия  
Дата: 11.02.07 07:42
Оценка:
Здравствуйте, Ruweb, Вы писали:

R>Всем привет!

R>У меня следующая проблема..: получаю страницу, а в ней какие то левый байты появляются, мне сказали, что нужно нуль добавлять после recv, добавил..но не помогло.., в чем проблема, подскажите пожалуйста..вот код:

По всей видмости, приходит ответ в chunked формате — "левые байты" — это длины последующих текстовых блоков. Можно их анализировать, а можно просто заменить GET / HTTP/1.1 на GET / HTTP/1.0
Re: Чтение из сокета
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.02.07 08:20
Оценка:
Здравствуйте, Ruweb, Вы писали:

R>Всем привет!

R>У меня следующая проблема..: получаю страницу, а в ней какие то левый байты появляются, мне сказали, что нужно нуль добавлять после recv, добавил..но не помогло.., в чем проблема, подскажите пожалуйста..вот код:
R>
R>    char *header = "GET / HTTP/1.1\r\nAccept-Language: ru\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MRA 4.8 (build 01709))\r\nhost: yandex.ru\r\nConnection: Keep-Alive\r\n\r\n";
R>    char h[50000];
R>    int se, re, index = 0;
    
R>    se = send(s, header, strlen(header), 0);


1. Код возврата не проверяется. Сделал бы что-то вроде

if (se != strlen(header)) throw "send() failed";

R> while(re = recv(s, &h[index], 1024, 0))


2. То же для ответа.

R> {

R> index += re;
R> h[index] =0;
R> }
R>[/c#]

3. Показал бы заголовок ответа. Телепатия говорит, что вероятно тебе ответили с chunked encoding, в этом случае перед очередным куском идёт его длина и CRLF. Но могут быть и другие чудеса.
The God is real, unless declared integer.
Re: Чтение из сокета
От: Ruweb  
Дата: 11.02.07 08:59
Оценка:
netch80, телепатия твоя, тебя не подводит.
deadem, спасибо тебе, большое! то что нужно, на остальных форумах не понятно что советую, я и так книгами обложился, а они предлогали еще обложиться, не ну дело конечно полезное, но не всё сразу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.