Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

О 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 сокетов используется лишь для оценкиобъема принятых данных.


Наверх

Титульная страница Поиск, карта сайта Написать письмо