Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.21;
Скачать: CL | DM;

Вниз

Как синхронизируется http протокол...   Найти похожие ветки 

 
Jolik   (2010-08-30 14:43) [0]

... потребовалось сделать простой http сервер для обмена данными (чтобы пакеты без проблем ходили через маршрутизаторы).
Возник вопрос - а как сервер "узнает", что запрос от клиента поступил полностью? Или он считает, что все что приходит от клиента - это один запрос.
Поясню: вот сидит сервер, слушает порт. Пошли данные... Исходя из принципов TCP/IP - данные приходят частями и размер их в TCP определить не возможно. Так вот идут данные, мы их принимаем, принимаем, принимаем... и складываем в некоторый буфер. А как узнать, что все, данные закончились? По тайм ауту? А вдруг канал слабый и пакет где нить задержался? А вдруг на той стороне злоумышленник? И льет данные и льет...

Та же история и с джаббером. Но там хоть по структуре XML как то можно ориентироваться - где конец, где начало...

Приходилось писать свои простые протоколы - так я в заголовке пакета одно из полей отводил под размер - сразу все понятно, получил заголовок и ждешь указанный размер. Принял - обрабатываешь, не принял - разрываешь по таймауту.

Проясните, если кто может...
Заранее благодарен!

PS: компоненты не предлагать


 
Медвежонок Пятачок ©   (2010-08-30 14:50) [1]

по пустой строке либо по указанному клиентом контент-ленсу


 
Медвежонок Пятачок ©   (2010-08-30 14:53) [2]

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


 
Anatoly Podgoretsky ©   (2010-08-30 15:14) [3]

> Пошли данные... Исходя из принципов TCP/IP - данные приходят частями и размер их в TCP определить не возможно.

По TCP/IP да нельзя, но тут то испольдуется протокол более высокого уровня, а у него есть поле размера, если же поля нет, то по разрыву соединения или по таймауту.


 
Медвежонок Пятачок ©   (2010-08-30 15:19) [4]

потребовалось сделать простой http сервер

ну ему-то как бы до сборки пакетов дела нет. это решается этажами ниже.
его дело работа на прикладном уровне, где никаких пакетов уже нет, есть только данные


 
sniknik ©   (2010-08-30 15:23) [5]

> так я в заголовке пакета одно из полей отводил под размер - сразу все понятно
в заголовке ответа от сервера тоже есть размер (ContentLength).  и он проверяется где то "у нутрях" (иначе нафига он нужен?).

т.что можешь считать, что -
> все что приходит от клиента - это один запрос.


 
Jolik   (2010-08-30 16:58) [6]


> сначала считываем в цикле строки по ка не считаем пустую.
>
> затем смотрим, указано ли в принятом длина контента.
> если указана, читаем дополнительно указанное число байт


Все ясно!
На пстую строку я внимания не обратил.
Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2010.11.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
6-1199895934
Danger
2008-01-09 19:25
2010.11.21
Разобрать Chunked encoded


3-1242624205
Константин
2009-05-18 09:23
2010.11.21
Interbase - работа по сети


6-1229289935
ZIlog
2008-12-15 00:25
2010.11.21
TWebBrowser и заполнение формы.


15-1281126597
Юрий
2010-08-07 00:29
2010.11.21
С днем рождения ! 7 августа 2010 суббота


15-1281385795
Юрий
2010-08-10 00:29
2010.11.21
С днем рождения ! 10 августа 2010 вторник