Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.096 c
2-1187334864
Adios
2007-08-17 11:14
2007.09.09
ValueListEditor


1-1183280902
JanMihail
2007-07-01 13:08
2007.09.09
Как узнать позицию каретки в чужом окне?


15-1187114533
Rouse_
2007-08-14 22:02
2007.09.09
Вопрос


4-1174252365
rommel
2007-03-19 00:12
2007.09.09
Google toolbar


2-1186672568
1c_user
2007-08-09 19:16
2007.09.09
Не показывается картинка на форме с помощью loadfromfile. почему?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский