The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Прблема при чтении из буфера TCP"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Прблема при чтении из буфера TCP"  
Сообщение от BsDr (ok) on 04-Июн-08, 11:48 
Здравствуйте!

Написал скачивалку страниц.
На kevent, при готовности сокета на чтение делаю не блокируемый сокет и пытаюсь скачать страницу, если вкраце то так:

setsockopt(kq_events[i].ident, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));

for(;;)
    {
        if((n = read(kq_events[i].ident, readbuf, MAXLINE)) == 0)
            {
                close(kq_events[i].ident);
                break;
            }
        
        if(n < 0)
            {
                close(kq_events[i].ident);
                if(errno == EWOULDBLOCK)
                    {
                        printf("TIMEOUT RCV!!!\n");
                    }
                break;
            }
        
        printf("n: %i\n", n);
        printf("readbuf: %s\n", readbuf);
        printf("-----------------------------------------------------------\n");
        
        bzero(&readbuf, MAXLINE*sizeof(char));
    }

так вот причтении получается слудующее:

в то содержимое что а прочитал вклиниваются какието левые символы,
символы эти являются размером(в 16ти ричном формате) в байтах той части текста, которая идет после этих цифр до конца прочитанного(ну или то следуючего такого вклинивания).
Ниже скрины и привер текста, тот что скачал:

http://funnylinks.ru/opennet/scr1.JPG
http://funnylinks.ru/opennet/scr2.JPG
http://funnylinks.ru/opennet/siteHTML.txt

Кто-нибудь сталкивался с этим? Как лечить?
Спасибо.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Прблема при чтении из буфера TCP"  
Сообщение от Fisher (??) on 04-Июн-08, 13:43 
Видимо такая сруктура пакета, начиная со второй посылке, т.к. сокет не может сразу все прочитать, если я правильно понял.

Т.е. readbuf должна быть струтурой:

1 байт - длина посланных данных(uint8_t),
все остальное данные(char).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Прблема при чтении из буфера TCP"  
Сообщение от BsDr (ok) on 04-Июн-08, 14:53 
>Видимо такая сруктура пакета, начиная со второй посылке, т.к. сокет не может
>сразу все прочитать, если я правильно понял.
>
>Т.е. readbuf должна быть струтурой:
>
>1 байт - длина посланных данных(uint8_t),
>все остальное данные(char).

Да, можно предположить что именно так, но есть одно но:
вот этот вот самый байт "1 байт" он вклинивается в середину того что я прочитал из буфера.
Т.е было бы логично что-то получить из буфера и посленим(или первым следующей посылки) байтом сообщить сколько читать еще, так нет же эта вот ерунда влазит посередине того что я прочитал из буфера..
на скринах видно что этот байт между "------------------", т.е. это то что я прочитал за онду порцию из сокета.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Прблема при чтении из буфера TCP"  
Сообщение от BsDr (ok) on 04-Июн-08, 16:37 
Все оказалось очень посто:
Виною всему вот этот вот заголовок от сервера
Transfer-Encoding: chunked

Что бы этого не было надо указать
GET http://xxxx HTTP/1.0
вместо
GET http://xxxx HTTP/1.1
Апач сам разбивал документ на порции.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру