我接收到的结构数据不对,是在本机上测试的:
结构:
type
_UDP_INFO = packed record
OptionType: integer;
Datatype:integer;
//STime:TDateTime;
Pak_t:integer;
Pak_num:integer;
Offset: DWORD;
end;
TIdUDPClient的发送:
var
aa,bb: _UDP_INFO ;
ms:TMemoryStream;
tms:TMemoryStream;
bu:string;
i:integer;
a:char;
begin
ZeroMemory(@aa,sizeof(aa));
udpc.BroadcastEnabled :=true;
aa.OptionType :=$A;
//aa.STime :=Now();
aa.Datatype :=1;
aa.Pak_t :=1;
aa.Pak_num :=1;
aa.Offset :=sizeof(aa);
ms:=TMemoryStream.Create;
ms.WriteBuffer(aa,sizeof(aa));
udpc.SendBuffer(ms,ms.Size );
****************************************
TIdUDPServer的接收代码:
procedure TForm1.udpsUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
strstream:TStringStream;
a:char;
b:char;
bu:string ;
aa: _UDP_INFO ;
ms:TMemoryStream;
s,i:integer;begin
ZeroMemory(@aa,sizeof(aa));
ms:=TMemoryStream.Create;
AData.Seek(0,soFromBeginning);
ms.CopyFrom(AData,Adata.Size ) ;
ms.Seek(0,soFromBeginning);
ms.Read(aa,sizeof(aa) );
Memo1.Lines.Add('Data Option: '+IntToStr(aa.OptionType ));
// Memo1.Lines.Add('Data Time: '+FormatDateTime('yyyy-m-d h:n:s',aa.STime ) );
Memo1.Lines.Add('Data Type : '+IntToStr(aa.Datatype ) );
Memo1.Lines.Add('Data Pak_t : '+IntToStr(aa.Pak_t ) );
Memo1.Lines.Add('Data Pak_num : '+IntToStr(aa.Pak_num ) );
Memo1.Lines.Add('Data Pak_Office: '+IntToStr(aa.Offset ) );现在的问题是:接收到的数据是乱七八糟的..
结构:
type
_UDP_INFO = packed record
OptionType: integer;
Datatype:integer;
//STime:TDateTime;
Pak_t:integer;
Pak_num:integer;
Offset: DWORD;
end;
TIdUDPClient的发送:
var
aa,bb: _UDP_INFO ;
ms:TMemoryStream;
tms:TMemoryStream;
bu:string;
i:integer;
a:char;
begin
ZeroMemory(@aa,sizeof(aa));
udpc.BroadcastEnabled :=true;
aa.OptionType :=$A;
//aa.STime :=Now();
aa.Datatype :=1;
aa.Pak_t :=1;
aa.Pak_num :=1;
aa.Offset :=sizeof(aa);
ms:=TMemoryStream.Create;
ms.WriteBuffer(aa,sizeof(aa));
udpc.SendBuffer(ms,ms.Size );
****************************************
TIdUDPServer的接收代码:
procedure TForm1.udpsUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
strstream:TStringStream;
a:char;
b:char;
bu:string ;
aa: _UDP_INFO ;
ms:TMemoryStream;
s,i:integer;begin
ZeroMemory(@aa,sizeof(aa));
ms:=TMemoryStream.Create;
AData.Seek(0,soFromBeginning);
ms.CopyFrom(AData,Adata.Size ) ;
ms.Seek(0,soFromBeginning);
ms.Read(aa,sizeof(aa) );
Memo1.Lines.Add('Data Option: '+IntToStr(aa.OptionType ));
// Memo1.Lines.Add('Data Time: '+FormatDateTime('yyyy-m-d h:n:s',aa.STime ) );
Memo1.Lines.Add('Data Type : '+IntToStr(aa.Datatype ) );
Memo1.Lines.Add('Data Pak_t : '+IntToStr(aa.Pak_t ) );
Memo1.Lines.Add('Data Pak_num : '+IntToStr(aa.Pak_num ) );
Memo1.Lines.Add('Data Pak_Office: '+IntToStr(aa.Offset ) );现在的问题是:接收到的数据是乱七八糟的..
是什么,我改
SendBuffer('127.0.0.1',1501,ms,SizeOf(_UDP_INFO ));
测试没有问题啊
eg.
send:
......
sendtempRecord.Age=htonl(20);
......
recv:
......
recvAge=ntohl(sendtempRecord.Age)
......
aa.Offset :=sizeof(aa);
ms:=TMemoryStream.Create;
ms.WriteBuffer(aa,sizeof(aa));
udpc.SendBuffer(ms,ms.Size );
----------------------------------------->
aa.Offset :=sizeof(aa);
ms:=TMemoryStream.Create;
ms.WriteBuffer(aa,sizeof(aa));
ms.Position:=0;////////////////////////////////////////定位流的指针位置
udpc.SendBuffer(ms,ms.Size );