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

Вниз

record и MemoryStream   Найти похожие ветки 

 
Юнкер   (2006-05-08 00:11) [0]

Я передаю от клиента серверу (UDPIndy) запись. Делаю так:

type raz = packed record
a,b,c,odin,dva,tri,chet,pat : integer;
end;

var
 mypecord : raz;

mypecord.a := strtoint(Edit1.Text);
...........// заполняю запись
mypecord.pat := strtoint(Edit5.Text);

procedure TUDPMainForm.SendButtonClick(Sender: TObject);
var
  mydata : TMemoryStream;
begin
mydata := TMemoryStream.Create;
mydata.Write(mypecord, SizeOf(mypecord));
// EncryptStream(mydata, mydata.Size, key); - здесь данные шифруются поэтому и использую MemoryStream
UDPClient.SendBuffer(mydata, sizeof(mydata));


получаю на сервере так:

type raz = packed record
a,b,c,odin,dva,tri,chet,pat : integer;
end;

var
 mypecord : raz;

procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
  mydata : TMemoryStream;
begin
//  try
 mydata := TMemoryStream.Create;
 AData.Position:=0;
 AData.ReadBuffer(mydata, sizeof(mydata));
//  DecryptStream(mydata, mydata.Size, key); расшифровываю
 mydata.Read(mypecord, SizeOf(mypecord));


А как сейчас данные из mydata поместить в mypecord ?
Я вообще-то правильно делаю?


 
Юнкер   (2006-05-08 00:14) [1]

В коде на сервере:

> mydata.Read(mypecord, SizeOf(mypecord));

Это вроде не работает. Как правильно сделать? Помогите плз.


 
Пусик   (2006-05-08 00:26) [2]


> Юнкер   (08.05.06 00:14) [1]
>
> В коде на сервере:
>
> > mydata.Read(mypecord, SizeOf(mypecord));
>
> Это вроде не работает. Как правильно сделать? Помогите плз.
>
>


Почему не работает? Все правильно.

Вот пример. Работает как надо.

var
 mr1,mr2: TMyRecord;
 MS: TMemoryStream;
begin
 mr1.n1 := 100;
 mr1.n2 := 200;

 MS := TMemoryStream.Create;
 try
   MS.Write(mr1,SizeOf(TMyRecord));
   Ms.Position := 0;
   MS.Read(mr2,SizeOf(TMyRecord));
   ShowMessage(IntToStr(mr2.n1)+"/"+IntToStr(mr2.n2));
 finally
   MS.Free;
 end;


 
Юнкер   (2006-05-08 01:08) [3]

Неработает :(
А я правильно посылаю:
var
 mydata : TMemoryStream;

UDPClient.SendBuffer(mydata, sizeof(mydata));


?


 
Пусик   (2006-05-08 01:50) [4]


> Юнкер   (08.05.06 01:08) [3]
> А я правильно посылаю:
> ?


Конечно нет.
В качестве первого параметра у тебя указан TStream, а в качестве второго - размер указателя на него.

Сначала копируй данные для отправки в промежуточный буфер, его затем и посылай.


 
Юнкер   (2006-05-08 09:51) [5]


> Сначала копируй данные для отправки в промежуточный буфер,
>  его затем и посылай.

А сразу MemoryStream послать нельзя что ли?

Так тоже не получается: UDPClient.SendBuffer(mydata.memory^, mydata.Size);

Можно пример как правильно отправить MemoryStream ?  Я сам чевота не могу разобраться.


 
Юнкер   (2006-05-08 13:30) [6]

Помогите кто-нибудь.
Покажите как грамотные люди отправляют MemoryStream через idUDPClient. Плз.


 
Юнкер   (2006-05-08 17:54) [7]

Во, сам разобрался.
Раз тут никто не знает :) выложу, может кому-нибудь пригодтся :)

type raz = packed record
a,b,c,odin,dva,tri,chet,pat : integer;
end;

var
mypecord : raz;

procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
 mydata : TMemoryStream;
begin
//  try
 mydata := TMemoryStream.Create;
 AData.Position:=0; //надо!
 mydata.CopyFrom(AData, AData.Size);
 mydata.Position := 0;
 mydata.Read(mypecord, SizeOf(mypecord));



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

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

Наверх




Память: 0.46 MB
Время: 0.011 c
15-1146399937
Pazitron_Brain
2006-04-30 16:25
2006.05.28
Серьезные люди


2-1147403077
manevil
2006-05-12 07:04
2006.05.28
Копирование


10-1119734411
Shamansky
2005-06-26 01:20
2006.05.28
Экспорт в 1С Бухгалтерию


1-1145450930
Alex_C
2006-04-19 16:48
2006.05.28
Почему прерывается выполнение Thread?


15-1146638376
Kerk
2006-05-03 10:39
2006.05.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский