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

Вниз

Проблема с Socket.OnRead   Найти похожие ветки 

 
Apolius   (2004-12-01 16:49) [0]

Уважаемые мастера, скажите подалуйста как принимать пакеты различной длины:

var Len : integer;
   Buf : array of byte;
begin
Buf := nil;
Len := Socket.ReceiveLength;
SetLength(Buf,Len);
Socket.ReceiveBuf(buf,Len);


если я использую buf:array of byte, то компилятор ругаеться в строке Socket.ReceiveBuf(buf,Len);
если я обьявляю buf : array[0..n] of byte, то тогда теряеться смысл приема пакетов различной длины и появляеться куча проблем. n приходиться подбирать!

Вопрос таков:
Во что записать принятый пакет и как его потом переконвертировать в Buf:array of byte?


 
savva ©   (2004-12-01 19:15) [1]

ну ты хоть бы сказал как ругается..

я б н-р так сделал (в приближении к твоему коду):

var Len : integer;
  Buf : PChar;
begin
Buf := nil;
Len := Socket.ReceiveLength;
GetMem(Buf,Len);
try
 Socket.ReceiveBuf(buf,Len);
 // тут делаешь что хочешь с данными
finally
 FreeMem(buf);
end;


 
savva ©   (2004-12-01 19:20) [2]

но опять же такой подход довольно опасен - так как может произойти "склеивание" пакетов. и тогда логика твоих данных может быть наружена.. ты б сперва посылал длину данных, а потом читал бы столько, сколько надо (© Beeline).


 
savva ©   (2004-12-01 19:22) [3]

поправка:

Socket.ReceiveBuf(buf,Len);

надо читать как

Socket.ReceiveBuf(buf^,Len);



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
1-1106753319
MakedoneZ
2005-01-26 18:28
2005.02.13
На счет совместимости приложений и координат компонентов формы.


1-1107192982
hawkins
2005-01-31 20:36
2005.02.13
в компоненте SynEdit на месте символов #10 #13 квадраты


14-1106346115
AlterEgo of WondeRu
2005-01-22 01:21
2005.02.13
Почему флудерные ветки такие рейтинговые?


1-1106744363
Raider
2005-01-26 15:59
2005.02.13
Исходник звонилки


1-1106928415
Rem
2005-01-28 19:06
2005.02.13
WriteText и белый фон