Главная страница
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.02 c
11-1159952232
Моторокер
2006-10-04 12:57
2007.09.09
Как лучше менять иконку в TKOLTrayIcon?


4-1174064441
ChainicDenis
2007-03-16 20:00
2007.09.09
Как узнать, установлен ли драйвер


15-1186921982
Faiwer
2007-08-12 16:33
2007.09.09
Помогите распаковать ехе-тник для перевода


15-1187083135
DagOT-R
2007-08-14 13:18
2007.09.09
Поле MEMO непонятного происхождения


2-1186997660
Quart
2007-08-13 13:34
2007.09.09
Images