Главная страница
    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.47 MB
Время: 0.012 c
3-1144331501
RomanH
2006-04-06 17:51
2006.05.28
Одобрите выбор


2-1147081029
BAngel
2006-05-08 13:37
2006.05.28
События мышки


15-1146767168
Volf_555
2006-05-04 22:26
2006.05.28
Как можно запретить автоматическую закачку из инета программ?


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


15-1146420362
Meson_
2006-04-30 22:06
2006.05.28
Вопрос по железу. Принтер HP 2610: ошибка при включении





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