Форум: "Сети";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.036 c