Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];

Вниз

Как синхронизируется 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1283107970
nellyk
2010-08-29 22:52
2010.11.21
FindNext-лишние файлы


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


2-1282947042
Германн
2010-08-28 02:10
2010.11.21
packed records и Records (advanced)


15-1281276816
Кто б сомневался
2010-08-08 18:13
2010.11.21
Литр пива в России


15-1281412831
ixen
2010-08-10 08:00
2010.11.21
DMClient не хочет работать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский