![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с Socket.OnRead
Apolius © (2004-12-01 16:49:00)Уважаемые мастера, скажите подалуйста как принимать пакеты различной длины:
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:22:00) [1]поправка:
Socket.ReceiveBuf(buf,Len);
надо читать как
Socket.ReceiveBuf(buf ^,Len);
savva (2004-12-01 19:20:00) [2]но опять же такой подход довольно опасен - так как может произойти "склеивание" пакетов. и тогда логика твоих данных может быть наружена.. ты б сперва посылал длину данных, а потом читал бы столько, сколько надо (© Beeline).
savva (2004-12-01 19:15:00) [3]ну ты хоть бы сказал как ругается..
я б н-р так сделал (в приближении к твоему коду):
var Len : integer;
Buf : PChar;
begin
Buf := nil;
Len := Socket.ReceiveLength;
GetMem(Buf,Len);
try
Socket.ReceiveBuf(buf,Len);
// тут делаешь что хочешь с данными
finally
FreeMem(buf);
end;