Главная страница
    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
1-91320
dimonf
2003-04-15 14:36
2003.04.28
Народ, объясните дурню как нормально скомпилить свой компанент!!!


1-91356
HeWSter
2003-04-09 15:52
2003.04.28
Как отловить нажатие горячих клавиш из потока?


14-91524
Pitay
2003-04-10 21:25
2003.04.28
Клавиатура


14-91549
tovSuhov
2003-04-11 16:04
2003.04.28
Помогите с тестированием...


14-91551
anbezr
2003-04-11 12:38
2003.04.28
Является ли string динамическим массивом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский