Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизРазмер отылаемого за раз пакета данных через TCustomWinSocket Найти похожие ветки
← →
DelphiN! (2007-12-07 08:01) [0]Отсылаю данные следующей процедурой:
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 08:16) [1]
> 1024 байта. Оптимален ли этот размер?
Оптимальным, imho, будет размер, возвращаемый ф-цией GetSockOpt(..SO_SNDBUF..)
> допустимо ли данное выражение while Socket.SendBuf(buff,
> i)=-1 do
Допустимо.
Но в блокирующем режиме в нем нет никакой надобности.
А собссно к чему все это ? Есть же штатный метод SendStream, он чем не угодил ?
← →
DelphiN! (2007-12-07 09:07) [2]
> Сергей М. © (07.12.07 08:16) [1]
Если использовать SendStream то нижняя часть больших HTML документов (больше 100 кб например) не отсылается клиенту. После того как я переделал на отсылку частями через SendBuff документы отсылаются полнойстю
← →
Сергей М. © (2007-12-07 09:11) [3]
> DelphiN! (07.12.07 09:07) [2]
Просто у тебя ошибка в 17-й строке, вот потому и "не отсылается")
Не вижу никакого резона изобретать свой SendStream, в то время как штатный одноименный метод работает корректно и успешно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c