Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Вниз

Использование массивов переменной длинны при работе с Socket   Найти похожие ветки 

 
RUS1   (2003-03-05 08:49) [0]

Добрый день господа!!!!
Уважаемые господа подскажите пожалуста можно ли при передаче клиенту методом SendBuf типа Record использовать внутри етой записи массивы переменной длины (зарание длина масссива не известна).??
С уважением RUS/


 
Digitman   (2003-03-05 08:54) [1]

отчего ж нельзя ? можно)

смотри, к примеру, как реализованы методы TDataBlockInterpreter.Readvariant/WriteVariant (модуль SConnect).

эти методы читают/записывают из/в поток данные вариантного типа, в т.ч. являющиеся массивами перем.длины.
надеюсь, уже сформированный поток принять/передать не составит труда


 
RUS1   (2003-03-05 10:03) [2]

Значит так если делаю вот так:
Сервер:
Type
TData = Record
Name :String[10];
Data :varVariant;
end;
var MyData :TData;
begin
MyData.Data:=VarArrayCreate([1,1],varSingle);
VarArrayRedim(MyData.Data,2);
MyData.Name:="GOVNO";
MyData.Data[1]:=100;
MyData.Data[2]:=1.34;
ServerSocket1.Socket.Connections[0].SendBuf
(MyData,SizeOf(MyData));
end;

Клиент:
procedure TMainForm.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
Type
TData = Record
Name :String[10];
Data :varVariant;
end;
var MyData :TData;
begin
Socket.ReceiveBuf(MyData,SizeOf(MyData));
ClientMemo.Lines.Add(MyData.Name);
ClientMemo.Lines.Add(FloatToStr(MyData.Data[1]));
end;
то ничего не работает, даже если в клиенте ставить реальный размер записи (например в данном случае 32 байта,
ReceiveBuf(MyData,32) ) а если вот так:
Сервер:
Type
TData = Record
Name :String[10];
Data :Array [1..2] of Single;
end;
var MyData :TData;
begin
MyData.Name:="GOVNO";
MyData.Data[1]:=100;
MyData.Data[2]:=1.34;
ServerSocket1.Socket.Connections[0].SendBuf
(MyData,SizeOf(MyData));
end;

Клиент:
procedure TMainForm.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
Type
TData = Record
Name :String[10];
Data :Array [1..2] of Single;
end;
var MyData :TData;
begin
Socket.ReceiveBuf(MyData,SizeOf(MyData));
ClientMemo.Lines.Add(MyData.Name);
ClientMemo.Lines.Add(FloatToStr(MyData.Data[1]));
end;
второй вариант понятное дело работает и все окей!! Но почему первый вариант не работает??


 
Digitman   (2003-03-05 10:17) [3]


> почему первый вариант не работает??


потому что в действительности передается ссылка на вар.переменную (адрес ее упр.структуры) в ВАП передатчика, а не сами данные, которыми управляет вар.переменная на стороне передатчика

передача адреса попросту бессысленна, если передатчик и приемник находятся в разных виртуальных или физических адресных пространствах


 
RUS1   (2003-03-05 10:23) [4]

так как выйти из ситуации хоть кусочек кода малюсенький!!!! плиззззз!!!!


 
RUS1   (2003-03-05 10:36) [5]

ТАК КАК РЕШИТЬ ПРОБЛЕМУ С МАССИВАМИ ПЕРЕМЕННОЙ ДЛИНЫ, ГОСПОДА!!!


 
Digitman   (2003-03-05 11:01) [6]

см. Digitman © (05.03.03 08:54) !!



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

Форум: "Сети";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-91143
Leviathan
2003-04-08 22:30
2003.04.28
TQuery.Post


1-91381
sapsi
2003-04-16 11:27
2003.04.28
определение расположения исполняемого файла при запуске


11-91239
Vitalis
2002-07-21 12:08
2003.04.28
Графика в KOL


14-91492
it
2003-04-10 00:18
2003.04.28
Получение файлов из подпапок


14-91451
machmud
2003-04-11 17:38
2003.04.28
У кнопки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский