Форум: "Сети";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
ВнизПрием буфера из сокета Найти похожие ветки
← →
TWINc_ (2007-01-16 16:42) [0]прикрутил функцию... с маленькими пакетами вроде все работает хорошо, а когда посылаю пакет размером кб в 500, то все завершается крахом или просто забито нулями после первой принятой поции...
const
BUFS = 1024;
procedure TSock.ReceiveBuffer(aBuffer : pointer; const aSize : int);
var
Buf : PByteArray;
Len, ReadTotal, ReadLen,i : int;
Tick : DWORD;
begin
GetMem(buf,aSize);
ReadTotal := 0;
if aSize < BUFS then
ReadLen := aSize
else
ReadLen := BUFS;
while ReadTotal < aSize do
begin
tick := GetTickCount;
if ReadTotal + ReadLen > aSize then
ReadLen := aSize - ReadTotal;
len := recv(Sock,buf[ReadTotal],ReadLen,0);
if len <= 0 then
begin
FIsConnected := false;
break;
end; // if
Inc(ReadTotal,len);
if ReadTotal >= aSize then
break;
if GetTickCount - tick < 1 then
ReadLen := ReadLen * 2;
end; // while
Move(buf[0],Pbytearray(aBuffer)[0],aSize);
FreeMem(buf,aSize);
end;
← →
Сергей М. © (2007-01-17 08:20) [1]
> прикрутил
Откручивай.
Не то прикрутил.
Или не так.
Для "прикручивания" существует "отвертка" типа отладчик.
← →
TWINc_ (2007-01-18 01:59) [2]
> Сергей М. © (17.01.07 08:20) [1]
не знаем чего ответить - молчим...
p.s. проблема решена
← →
Сергей М. © (2007-01-18 08:55) [3]
function TSock.ReceiveBuffer(aBuffer: Pointer; aSize: Integer): Integer;
var
BytesRead: Integer;
begin
Result := 0;
while aSize > 0 do begin
BytesRead := recv(Sock, PByteArray(aBuffer)[Result], aSize,0);
if BytesRead <= 0 then Exit;
Inc(Result, BytesRead);
Dec(aSize, BytesRead);
end;
end;
Вот и все премудрости для блок.режима)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.043 c