![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемма при отправке буфера
Piero © (2005-09-15 17:25:00)Настроил 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-17 13:51:00) [1]Спасибо
Reindeer Moss Eater (2005-09-15 23:07:00) [2]Размер данных к твоей ошибке отношения не имеет.
Вместо имени переменной в SendBuf надо указывывать адрес первого элемена массива. И при приеме тоже самое.
Piero (2005-09-15 22:05:00) [3]Понял, а как правильно, если я заранее не знаю размер отправляемых данных?
Reindeer Moss Eater (2005-09-15 20:32:00) [4]И при приеме, кстати, тоже самое.
Reindeer Moss Eater (2005-09-15 20:26:00) [5]var b : array of byte;
переменная-динамический массив это всегда ссылка.
В то время как :
SendBuf(var Buf; Count : integer);
То есть параметром ожидается адрес участка памяти, а не значение указателя на него.
Piero (2005-09-15 17:34:00) [6]да и забыл сказать, по объему отправляемые данные и то, что получаю одинакового размера, акогда смотрю файл, то разные