Текущий архив: 2005.12.25;
Скачать: CL | DM;
Вниз
Проблемма при отправке буфера Найти похожие ветки
← →
Piero (2005-09-15 17:25) [0]Настроил SocketServer и SocketClient друг на друга, строчки отсылаю нормально, но при отправке массива байт, получаю не то, что посылал, подскажите, где я торможу
//Прием
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var s: String;
buf : array of byte;
i : integer;
t1 : file of byte;
begin
try
setlength(buf,Socket.ReceiveLength);
socket.ReceiveBuf(buf,length(buf));
for i := 1 to length(buf) do write(t1,buf[i]);
closefile(t1);
except
//
end;
end;
//Отправка
procedure TForm1.Button1Click(Sender: TObject);
var b : array of byte;
i : integer;
begin
assignfile(t2,FilenameEdit2.Text);
reset(t2);
i:=0;
while not eof(t2) do
begin
setlength(b,length(b)+1);
read(t2,b[i]);
i:=i+1;
end; //while
clientSocket1.Socket.SendBuf(b,length(b));
end;
спасибо
← →
Piero (2005-09-15 17:34) [1]да и забыл сказать, по объему отправляемые данные и то, что получаю одинакового размера, акогда смотрю файл, то разные
← →
Reindeer Moss Eater © (2005-09-15 20:26) [2]var b : array of byte;
переменная-динамический массив это всегда ссылка.
В то время как :
SendBuf(var Buf; Count : integer);
То есть параметром ожидается адрес участка памяти, а не значение указателя на него.
← →
Reindeer Moss Eater © (2005-09-15 20:32) [3]И при приеме, кстати, тоже самое.
← →
Piero (2005-09-15 22:05) [4]Понял, а как правильно, если я заранее не знаю размер отправляемых данных?
← →
Reindeer Moss Eater © (2005-09-15 23:07) [5]Размер данных к твоей ошибке отношения не имеет.
Вместо имени переменной в SendBuf надо указывывать адрес первого элемена массива. И при приеме тоже самое.
← →
Piero (2005-09-17 13:51) [6]Спасибо
Страницы: 1 вся ветка
Текущий архив: 2005.12.25;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.011 c