2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > linux的基础知识——网络字节序转化 ip地址转换函数 sockaddr数据结构

linux的基础知识——网络字节序转化 ip地址转换函数 sockaddr数据结构

时间:2021-03-27 14:19:00

相关推荐

linux的基础知识——网络字节序转化 ip地址转换函数 sockaddr数据结构

1.网络字节序

TCP/IP协议规定,网络数据流采用大端字节序,即低地址高字节。为了使网络程序具有可移植性,使得同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

#include<arpa/inet.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);

h:host;n:network;l:32位长整数;s:16位短整数

如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回,如果主机是大端字节序,这些函数不做转换,将参数原封不动的返回。

2.IP地址转换函数

2.1 将IP地址转换为网络字节序

#include<arpa/inet.h>int inet_pton(int af,const char *src,void *dst);

功能:将IPv4地址转换为网络字节序

参数:af:AF_INET或者AF_INET6,前一个是个IPv4地址,后一个适合IPv6地址;src:点分十进制的字符串;dst:写进网络字节序

2.2 将网络字节序转换为IP地址

#include<arpa/inet.h>int inet_ntop(int af,const void *src,char *dst,socklen_t size);

功能: 将网络字节序转换为IP地址

参数::af:AF_INET或者AF_INET6,前一个是个IPv4地址,后一个适合IPv6地址;src:网络字节序;dst:返回字符串的指针的地址;size:字符串的大小

3.sockaddr数据结构

struct sockaddr很多网络编程函数诞生于IPv4协议之前,那时候都是使用struct sockaddr结构体,但是这个结构体逐渐被废弃,原struct sockaddr演变成struct sockaddr_instruct sockaddr_in6,但是很多函数内部仍然需要传递struct sockaddr的地址,所以我们需要强制转换所需的地址类型。

struct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */in_port_tsin_port; /* port in network byte order */struct in_addr sin_addr; /* internet address */};struct in_addr {uint32_t s_addr;/* address in network byte order */};

参数:sin_family::AF_INET或者AF_INET6;sin_port:端口号;sin_addr:IP地址

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。