网络传输结构体,字节序,大小端怎么解决

1.
C/C++
code
#pragma
pack(push)
#pragma
pack(1)
//定义结构体
#pragma
pack(pop)
2.
传输的时候都使用网络字节序,这是标准的做法回。
发送方答htonl/s
接收方ntohl/s

② delphi 使用UDP发送结构体问题

SendStruct = record
ASize: Integer;
Name: array[0..0] of ansichar;
end;
你这样定义结构后,你就不能用new来分配内存了,因为用new长度就算不对了,所以要用getmem,自己算要分配的长度。比如下面:
var p:PSendStruct;
s:string;
len:Integer;
begin
s:='hello';
len:=sizeof(TSendStruct)+length(s);
getMem(p,len);
FillChar(p^,len,0);
p^.ASize:=len;
move(s[1],p^.Name,length(s));
//self.Caption:=pchar(@p^.Name);
IdUDPClient1.SendBuffer(p^, len);
freeMem(p);
end;
接收的时候类似,也用getmem分配。udp发送的数据包大小是有限制的(好象1024字节),所以如果你的数据包大过这个限制,你还得自己分包。
另外,定义网络发送的结构,最好加上packed关键字,结构会小不少。比如:
SendStruct =packed record
ASize: Integer;
Name: array[0..0] of ansichar;
end;

③ 网络传输结构体,字节序,大小端怎么解决

1.

C/C++ code
#pragma pack(push)
#pragma pack(1)
//定义结构体
#pragma pack(pop)

2. 传输的时候都使用网络字节序,这是标准的做法。
发送方htonl/s 接收方ntohl/s