天天看点

socket中的网络字节序/本地字节序互相转换函数。

(1)inet_addr :转换字符串到地址

(2)inet_ntoa  转换地址到字符串

(3)htons  ,h=host,n=network,s = short 。常用于绑定之前地址结构体的设置,将本机端口转为网络字节序。

(4)ntohs ,h=host,n=network,s = short。 常用于与对方通信后,在需要使用对方端口的时候,将其中(收到的对方端口为网络字节序)转为主机字节序。

(5)inet_pton, p=pointer n=network。功能同(1),该函数只在linux下有效,winsock无此函数。

(6)inet_ntop ,p=pointer n=network。功能同(2),该函数只在linux下有效,winsock无此函数。

(7)htonl,将unsigned long 数据从主机序转为网络序列。(用于格式化本机数据,在网络中传输)

(8) ntohl,将unsigned long 数据从网络序转为主机序列。(用于将网络中接收到的数据转化为本地可识别的整数)

示例:

(1)和(3)

struct sockaddr_in serv_addr;
      
serv_addr.sin_family=AF_INET;
      
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
      
serv_addr.sin_port=htons(5000);      

(2)和(4),假设此时cli_addr结构体已通过accept填充。

struct sockaddr_in cli_addr;
      
puts(inet_ntoa(cli_addr.sin_addr));
      
printf("%d\n" ,ntohs(cli_addr.sin_port));      

(5)和(6)

struct in_addr s;
      
inet_pton(AF_INET, "127.0.0.1", (void *)&s);
      
printf("inet_pton: 0x%x\n", s.s_addr);
      
char addr_str[16]={0x00};
      
inet_ntop(AF_INET, (void *)&s, addr_str, 16);
      

继续阅读