socket中网络字节序的处理

本文深入解析RADIUS协议中TLV属性的结构,详细说明了type域、length域和value域的含义及作用,并重点讨论了整数和时间类型的网络序与主机序转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

大体是这样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值