Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
4-1141569418
4ho
2006-03-05 17:36
2006.05.28
Передача параметров потоку.


2-1147430704
Id
2006-05-12 14:45
2006.05.28
SQL error code = -303


2-1147349923
pavelf
2006-05-11 16:18
2006.05.28
Удалить папку


15-1146148130
oldman
2006-04-27 18:28
2006.05.28
Навеяно вопросом "А сколько тебе платят?"...


15-1146659495
Layner
2006-05-03 16:31
2006.05.28
Вопрос, есть ли паромное сообщение между Крымом и Россией?