Главная страница
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-1186646633
IlyaSofronov
2007-08-09 12:03
2007.09.09
Очень срочно дизайнер - от 3000 р.


2-1187473015
foreverDelphi
2007-08-19 01:36
2007.09.09
завершения конекта TServerSocket - stThreadBlocking


15-1187122043
GeLLeR
2007-08-15 00:07
2007.09.09
Музыка из к/ф "13 район"


2-1187124924
Евгений Р.
2007-08-15 00:55
2007.09.09
ввод tDateTimePicker


11-1169204410
Las
2007-01-19 14:00
2007.09.09
библиотека KOL