socket中网络字节序的处理

来源:互联网 发布:python初学者书籍推荐 编辑:程序博客网 时间:2024/05/23 16:52

以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));

大体是这样的。

原创粉丝点击