Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

Прием буфера из сокета   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
15-1186570167
Reindeer Moss Eater
2007-08-08 14:49
2007.09.09
Эксель и счет


2-1187451030
RedBanner
2007-08-18 19:30
2007.09.09
отправка E-mail а


11-1169202581
mixail_shar
2007-01-19 13:29
2007.09.09
Ошибка в KOL к Кладову


15-1187180515
Andy BitOff
2007-08-15 16:21
2007.09.09
Есть ли функция возвращающая...


2-1187334285
qaaqqa
2007-08-17 11:04
2007.09.09
Pointer в функции.