Linux网络编程(一) 套接字编程简介

1.套接字地址结构

IPv4套接字地址结构

IPv4套接字地址结购也称为“网络套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>中。

  1: struct in_addr{
  2:    in_addr_t s_addr;    //32-bit IPv4 address
  3: };
  4: 
  5: struct sockaddr_in{
  6:     unit8_t  sin_len;    
  7:     sa_familt_t sin_family;
  8:     in_port_t    sin_port;
  9:     struct in_addr  sin_addr;
 10:     char sin_zero[8];
 11: };

 

2.字节排序函数

内存中存储数据有两种方法:一种是将低字节存储在起始地址,这称为小端字节序;另一种方法是将高字节序存储在起始地址,这称为大端字节序。

术语“小端”和“大端”表示多个字节值的哪一端存储在该值的起始位置

网际协议使用大端字节序来传送这些多字节整数

我们用以下的函数进行主机字节序和网络字节序的转换

  1: #include<netinet/in.h>
  2: 
  3: uint16_t htons(uint16_t host16bitvalue);
  4: unit32_t htonl(unit32_t host32bitvalue);
  5: //返回网络字节序值
  6: unit16_t ntohs(unit16_t host16bitvalue);
  7: unit32_t ntohl(uint32_t host32bitvalue);
  8: //返回主机字节序值

 

3.inet_aton、inet_addr和inet_ntoa函数

以下函数用来在ASCII字符串与网络字节序的二进制值之间转换网际地址。

inet_aton、inet_addr和inet_ntoa在点分十进制数串与它长度为32位的网络字节序二进制值间转换IPv4地址

  1: #include<arpa/inet.h>
  2: 
  3: int inet_aton(const char *strptr,struct in_addr *addrptr);
  4: //返回:若字符串有效则为1,否则为0
  5: in_addr_t inet_addr(const char *strptr);
  6: //若字符串有效则为32位二进制网络字节序的IPv4地址,否则为INADDR_NONE
  7: char *inet_ntoa(struct in_addr inaddr);
  8: //返回一个指向点分十进制数串的指针

以上的函数只能用于IPv4地址,以下的函数适合IP4和IP6

  1: #inlcude<arpa/inet.h>
  2: 
  3: int inet_pton(int family,const char *strptr,void *addrptr);
  4: //返回:若成功则为1,若输入不是有效的表达格式则为0,若出错则为-1
  5: const char *inet_ntop(int family,const void *addrptr,char *strptr,size_t len);
  6: //若成功则为指向结果的指针,若出错则为NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值