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

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

Размер отылаемого за раз пакета данных через TCustomWinSocket [WinXP]


DelphiN! ©   (2007-12-07 08:01:00) 

Отсылаю данные следующей процедурой:


function SendStream(var Socket: TCustomWinSocket; Stream: TStream): Boolean;
var
 i: integer;
 buff: array[0.. 1024] of byte;
begin
  Stream.Position:=0;
  repeat
    i:=Stream.Read(buff, 1024);
    while Socket.SendBuf(buff,i)=-1 do
  until i=0;
end;


Размер отсылаемой за раз "порции" данных 1024 байта. Оптимален ли этот размер?Либо нужно поставить какой либо другой.

Программа отсылает в основном текстовую информацию(HTML страницы). Размер которых в большинстве случаев около 100 килобайт. Максимальный же размер может быть несколько мегабайт.

Также, допустимо ли данное выражение while Socket.SendBuf(buff,i)=-1 do, либо оно может привести к зацикливанию программы в определённой ситуации?


Сергей М.   (2007-12-07 09:11:00) [1]


> DelphiN!   (07.12.07 09:07) [2]


Просто у тебя ошибка в 17-й строке, вот потому и "не отсылается")

Не вижу никакого резона изобретать свой SendStream, в то время как штатный одноименный метод работает корректно и успешно.


DelphiN!   (2007-12-07 09:07:00) [2]


> Сергей М. ©   (07.12.07 08:16) [1]


Если использовать SendStream то нижняя часть больших HTML документов (больше 100 кб например) не отсылается клиенту. После того как я переделал на отсылку частями через SendBuff документы отсылаются полнойстю


Сергей М.   (2007-12-07 08:16:00) [3]


> 1024 байта. Оптимален ли этот размер?


Оптимальным, imho, будет размер, возвращаемый ф-цией GetSockOpt(..SO_SNDBUF..)


> допустимо ли данное выражение while Socket.SendBuf(buff,
> i)=-1 do


Допустимо.

Но в блокирующем режиме в нем нет никакой надобности.

А собссно к чему все это ? Есть же штатный метод SendStream, он чем не угодил ?


Наверх

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