htons(), htonl(), ntohs(), ntohl()详解
来源:互联网 发布:大数据存储 编辑:程序博客网 时间:2024/06/07 02:09
将多字节整数类型的数据,从主机的字节顺序转化为网络字节顺序
#include <netinet/in.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
htonl就是把本机字节顺序转化为网络字节顺序。
所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低,低对高”(即一个数的高位字节存放于低地址单元,低位字节存放在高地址单元中)。但是计算机的内存存储数据时有可能是大尾顺序或者小尾顺序。
h---host 本地主机
to 就是to 了
n ---net 网络的意思
l 是 unsigned long
"s"表示short,"l"表示long
struct sockaddr_in servaddr;bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(SERV_PORT);
INADDR_ANY就是指定地址为0.0.0.0的地址,地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。
例如MontiVista Linux中在/usr/include/netinet/in.h定义为:
/* Address to accept any incoming messages. */
#define INADDR_ANY ((in_addr_t) 0x00000000)
一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给我。这个过程,你是通过bind()系统调用完成的。——也就是说,你的程序要绑定服务器的某地址,或者说:把服务器的某地址上的某端口占为已用。服务器操作系统可以给你这个指定的地址,也可以不给你。
如果你的服务器有多个网卡(每个网卡上有不同的IP地址),而你的服务(不管是在udp端口上侦听,还是在tcp端口上侦听),出于某种原因:可能是你的服务器操作系统可能随时增减IP地址,也有可能是为了省去确定服务器上有什么网络端口(网卡)的麻烦 —— 可以要在调用bind()的时候,告诉操作系统:“我需要在 yyyy 端口上侦听,所以发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的数据,都是我处理的。”这时候,服务器程序则在0.0.0.0这个地址上进行侦听。例如:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
/* Address to accept any incoming messages. */
#define INADDR_ANY ((in_addr_t) 0x00000000)
一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给我。这个过程,你是通过bind()系统调用完成的。——也就是说,你的程序要绑定服务器的某地址,或者说:把服务器的某地址上的某端口占为已用。服务器操作系统可以给你这个指定的地址,也可以不给你。
如果你的服务器有多个网卡(每个网卡上有不同的IP地址),而你的服务(不管是在udp端口上侦听,还是在tcp端口上侦听),出于某种原因:可能是你的服务器操作系统可能随时增减IP地址,也有可能是为了省去确定服务器上有什么网络端口(网卡)的麻烦 —— 可以要在调用bind()的时候,告诉操作系统:“我需要在 yyyy 端口上侦听,所以发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的数据,都是我处理的。”这时候,服务器程序则在0.0.0.0这个地址上进行侦听。例如:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
0 0
- htons(), htonl(), ntohs(), ntohl()详解
- htons(), htonl(), ntohs(), ntohl()
- ntohs(),ntohl(),htons(),htonl(),
- htons(), htonl(), ntohs(), ntohl()
- htons(), htonl(), ntohs(), ntohl()
- htons,htonl,ntohs,ntohl
- htons(), htonl(), ntohs(), ntohl()
- htonl(), ntohl(), htons(), ntohs().
- htons,htonl,ntohs,ntohl
- htonl ntohl htons ntohs
- htons ntohs htonl ntohl
- htonl、htons、ntohl、ntohs
- ntohs, ntohl, htons,htonl
- ntohs,htons,ntohl,htonl
- ntohs, ntohl, htons,htonl inet_aton等详解
- ntohs, ntohl, htons,htonl inet_aton等详解
- ntohs, ntohl, htons,htonl inet_aton等详解
- ntohs htons ntohl htonl比较和详解
- 豆瓣回帖
- 判断两个链表是否相交
- java集合类——Stack类
- 积跬步至千里系列之十二--init进程
- 2016.2.26 工作笔记
- htons(), htonl(), ntohs(), ntohl()详解
- Xilinx 的 HDMI 的 IPCORE输出调试成功
- char* 和char []的区别
- 大型分布式网站架构技术总结
- kidd风的IOS日志之常用代码片段小结
- Servlet_07_Servlet细节
- cc.ResolutionPolicy.SHOW_ALL
- java环境变量配置
- C#精髓 第四讲 GridView 72般绝技