Linux中网络编程常用函数

1.字节序转换

 CPU 向内存保存数据以及解析数据的方式有两种:

   1)大端字节序(Big Endian): 高位字节存放在低位地址上

   2)  小端字节序(Little Endian): 高位字节存放在高位地址上

因为这种差异性,异导致数据解析的混乱,因此在通过网络传输数据时,先将数据数组转换成大端格式再进行网络传输(网络序)。

相应的转化函数如下:

unsigned short htons(unsigned short);  //把short型数据从主机字节序转换成网络字节序
unsigned short ntohs(unsigned short);  //把short型数据从网络字节序转换成主机字节序
unsigned long htonl(unsigned long);
unsigned long ntohl(unsigned long);

这里s指short(2个字节),以s结尾的函数通常作为端口的转换;l 指long(4个字节), 以l结尾的函数通常作为IP地址的转换。

2.网络地址的初始化和分配

1)将字符串信息转换成网络字节序整数型

#include<arpa/inet.h>
in_addr_t inet_addr(const char *string);    //成功时返回32位大端整型值,失败时返回INADDR_NONE
int inet_aton(char *string,struct in_addr *addr); //成功时返回1,失败时返回0
   string: 含有需转换的IP地址信息的字符串地址值
   addr:将保存转换结果的in_addr结构体变量的地址值
2)将网络字节序整型IP地址转换成字符串型

#include<arpa/inet.h>
char *inet_ntoa(struct in_addr adr);   //成功时返回转换后的字符串地址值,失败后返回0

3.IP地址与域名之间的转换

#include<netdb.h>
struct hostent *gethostbyname(const char *hostname); //成功时返回hostent结构体的地址,失败时返回NULL

struct hostent *gethostbyaddr(const char *addr,socklen_t len,int family);  //成功时返回hostent结构体变量值,失败时返回NULL
  addr:含有IP地址信息的in_addr 结构体指针
  len:向第一个参数传递的地址信息字节数
  family:传递地址簇信息,IPV4时为AF_INET

hostent结构体如下:

struct hostent{
    char *h_name;       //offical name(官方域名,代表某一主页)
    char **h_aliases;  //alias list  (同一IP绑定多个域名)
    int h_addrtype;       //host address type 
    int h_length;          //address length
    char **h_addr_list ;  //address list   (多个IP对应同一域名,实现多个服务器直接的负载均衡)
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值