网络学习四

套接字编程简介

  • 套接字地址结构
  • inet_aton、inet_addr和inet_ntoa函数
  • inet_pton 和 inet_ntop函数

1、套接字地址结构

ipv4套接字地址结构

<netinet/in.h>
struct in_addr{
  in_addr_t s_addr;
}
struct sockaddr_in {
  uint8_t             sin_len;
  sa_family_t     sin_family;
  in_port_t         sin_port;
  struct in_adr   sin_addr;
  char                sin_aero[8];
}

sin_addr 是ip地址
sin_port 是端口号
sin_family 是指具体的协议 套接字地址结构的地址族

通用套接字地址结构

<sys/socket.h>
struct sockaddr{
  uint8_t          sa_len;
  sa_family_t  sa_family;
  char             sa_data[14];
}

由于套接字函数是在ANSIC之前定义的,没有void*类型的指针,所以在使用某些函数时需要将套接字地址结构强制转化为该结构

IPV6的套接字地址结构

<netinet/in.h>
struct in6_addr{
  uint8_t    s6_addr[16];
};
#define  SIN6_LEN
struct  sockaddr_in6 {
  uint8_t              sin6_len;
  sa_family_t      sin6_family;
  in_port_t          sin6_port;

 uint32_t            sin6_flowinfo;
 struct in6_addr sin6_addr;
 uint32_t            sin6_scope_id
};

新的通用套接字地址接结构

<netinet/in.h>
struct sockaddr_storage {
  uint8_t         ss_len;
  sa_family_t  ss_family; 
};

2、inet_aton、inet_addr和inet_ntoa函数

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

#include<arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);  
in_addr_t inet_addr(const char *strptr);
char *inet_ntoa(struct in_addr inaddr);

第一个函数inet_aton将strptr所指C字符串转换成一个32位的网络字节序二进制值,并通过指针addrptr来存储。若成功则返回1,否则返回0 inet_addr进行相同的转换,但是当出错时该函数返回INADDR_NONE常值。因为他的二进制值被用来指示该函数失败,inet_ntoa将一个32位网络字节序二进制IPv4地址转换成相应的点分十进制数串

3、inet_pton和inet_ntop函数

#include<arpa/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr);
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);

family 既可以是AF_INET 也可以是AF_INET6 .第一个函数尝试转换由strptr指针所指的字符串,并通过addrptr指针存放二进制结果。若成功则返回值为1,否则为0, inet_ntop进行相反的转换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • socket通信原理 socket又被叫做套接字,它就像连接到两端的插座孔一样,通过建立管道,将两个不同的进程之间...
    jiodg45阅读 1,184评论 0 1
  • 网络模型 物理层 物理层表示的是比特流传输,通常包括串口/COM口、并行/LPT口、USB、网线接口、电话线接口;...
    秋风弄影阅读 738评论 0 2
  • 研究IPv6 socket编程原因: Supporting IPv6 in iOS 9 WWDC2015苹果宣布在...
    li大鹏阅读 7,390评论 7 15
  • 一、基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的。网络的socket数据传输...
    WB莫遥燚阅读 1,497评论 0 0
  • 他一个人在山间小道上狂奔,不知道身后是谁在追,只知道如果被追上了,情况会很不妙。 他跑得气喘吁吁,胸口疼得跟要炸裂...
    水月不会心阅读 301评论 0 1