Форум: "Начинающим";
Текущий архив: 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