![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
О Socket.ReceiveLength
Alek_1 © (2004-11-10 21:17:00)Вот тут у меня возник вопрос, можно ли както узнать сколько байт выслал мне клиент?
Вот например делаю так
Socket.SendText('какаято пурга в 300 килобайт');
Естественно что сервер получать их будет постепенно, так вот можно ли в таком случае узнать серверу сколько байт отправил клиент если клиент перед отправкой сам несказал размер?
И что показывает Socket.ReceiveLength? то что в данный момент ко мне пришло или то размер отосланого клиентом пакета?
Я хочу неполные пакеты сбрасывать в буфер, до полного их прихода.
Что можете посоветовать?
Verg (2004-11-11 13:46:00) [1]
> так вот как собрать все (ХТТП заголовок и эти 300 кб пурги
> или сколько тама придет)
Либо в заголовке, в Content-Length размер, либо все, что до разрыва соединения.
Digitman (2004-11-11 13:30:00) [2]что, так трудно набрать "OSI" в любой поиск.системе ?
Alek (2004-11-11 13:18:00) [3]нет, но если даш линк почитаю
Digitman (2004-11-11 13:07:00) [4]
> Alek © (11.11.04 12:52) [5]
про 7-уровневую модель OSI xnj-yb,elm cksifk &
разницу между прикладным и транспортным протоколами инф.обмена понимаешь ?
Alek (2004-11-11 12:52:00) [5]
> гораздо важней собрать воедино все ожидаемые 300 кб "пурги",
> принятой, может, и за один прием, а , может, и за триста
> приемов, прежде чем принимать дальнейшие решения по обработке
> этой "пурги"
так вот как собрать все (ХТТП заголовок и эти 300 кб пурги или сколько тама придет) воедино для того чтобы потом обработать?
Для особо придирчивых к словам объясню.
"обычный запрос" - ГЕТ или ПОСТ запрос без параметров или такой запрос который приходит за один раз.
"сразу" - я не утверждаю что это произошло сразу, может была задержка мне не известно, я имею ввиду получил то что мне отсылают за один раз.
"пакет" - то что поступило ко мне в сокет в даннй момент
Это были небольшие пояснения к выше написаному мной тексту.
Еще что пояснить? ))
Digitman (2004-11-11 12:39:00) [6]
> Вот например при обычных запросах все нормально они приходят
> сразу
не факт.
и что, кстати, есть "обычный запрос" ? надо понимать, есть "необычные" ? "чудесно-волшебные" ?
что есть "сразу" ? в случае с поточными протоколами нет и не может быть повода утверждать, что "нечто" происходит "сразу".
> если например идет закачка какогото файла, то естественно
> посылка разбивается на несколько пакетов
еще раз : касаемо поточного протокола нет никакой разницы, "закачка" там творится или "откачка", "обычный запрос" или "волшебный запрос".
> пришел весь пакет или нет
и ещераз : НЕТ понятия "пакет" на уровне поточно-ориентированного прикладного протокола.
это означает, что "какаято пурга в 300 килобайт" НЕ является целостнымпакетом с т.з. принимающей "пургу" стороны
когда речь идет о потоке, АБСОЛЮТНО неважно, что из себя представляет изнутри эта "пурга", принимающей стороне гораздо важней собратьвоедино все ожидаемые300 кб "пурги", принятой, может, и за один прием, а , может, и за триста приемов, прежде чем принимать дальнейшие решения по обработке этой "пурги"
Alek (2004-11-11 12:28:00) [7]Конечно я читал РФК и знаю что загловок от даннх отделяет пустая строка и потом можно вычислить ее контент-легт, но например Прокси через который зашел я WinRoute после первой строки в методе ПОСТ вставляет пустую строку, да и в методе ГЕТ тоже.
Вот как бороться с разными проксями?
Alek (2004-11-11 12:14:00) [8]Я делаю небольшой веб сервер и мне нужно знать пришел весь пакет или нет!
Вот например при обычных запросах все нормально они приходят сразу, а вот если например идет закачка какогото файла, то естественно посылка разбивается на несколько пакетов).
Вот если кто работал с заголовками ХТТП подскажите как узнать пришел весь пакет или нет, я конечно считаю Контент-Ленгт и все работало, пока не начал заходить на сайт через прокси сервер.
Может у кого уже есть готовый обработчик ХТТП запросов?
Verg (2004-11-10 23:25:00) [9]
> так вот можно ли в таком случае узнать серверу сколько байт
> отправил клиент если клиент перед отправкой сам несказал
> размер?
Тогда он должен обозначить конец передаваемых данных некоторой, комбинацией, которой не может встретиться в самих данных.
> И что показывает Socket.ReceiveLength?
Это некоторое число, пропорциональноекол-ву принятых сокетом данных из потока на данный момент времени. Принятых, а не переданных "собеседником".
Коэффициент же этой пропорциональности больше единицы.
ReceiveLength для TCP сокетов используется лишь для оценкиобъема принятых данных.