Главная страница
    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-91277
Fighter
2003-04-17 12:03
2003.04.28
Как реализовать автоподстановку?


6-91436
Dona
2003-03-06 12:45
2003.04.28
ServerSock - как отправить сообщ. клиенту


1-91373
дикий Джо
2003-04-16 09:11
2003.04.28
Как сделать чтобы MDIChild Form при сворачивании исчезала?


4-91586
}{enon
2003-03-01 16:18
2003.04.28
Проблемы с хуком


14-91501
Иван Шихалев
2003-04-10 13:18
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский