以RADIUS为例,在RADIUS的TLV属性的结构大概如下:
typedef struct _radius_tlv_t {
char type;
char length;
char value[1];
}radius_tlv_t;
type域和length域都是一个字节,不需要转序。
value域根据不同的type会由协议事先约定类型,有4种默认类型:
整数,字符串,二进制码流,时间。
很显然,字符串和二进纸码流均按字节逐个传输,不需要考虑网络序和主机序转换问题
整数和时间需要考虑。
因为RADIUS协议中的整数和时间实际都是32位整数(不考虑tag的情况下),所以发送端都
应该使用htonl转换为网络序,而接受端则应该使用ntohl转换为主机序
把这个struct 看成一个整体就不需要转换了。
char* p =(char*) stMsg;
send(net,p,sizeof(stMsg));
---
struct msg m;
recv(net,(void*)&m,sizeof(m));
大体是这样的。