名字和地址转换

来源:互联网 发布:欧莱雅美发产品淘宝 编辑:程序博客网 时间:2024/04/29 10:43

这都是系统调用,掌握主要矛盾,次要矛盾实践中零碎弄明白。慢慢学习基础知识,千万不要好高骛远,都是在慢慢的学习知识问题。
这章很简单,就是介绍了一些系统函数如何使用,以及调用者和被调用者变量分配问题,可以深化对C语言的理解。

域名系统调用

域名系统 (Domain Name System, DNS) 主要用于主机名字与IP地址之间的映射。主机名既可以是一个简单名字 (simple name )。

重要数据结构已经系统函数

gethostbyname

通过主机名返回主机对应的IPv4地址
指针数组的指针在这里使用很广泛。存储信息都由调用函数动态分配,返回的仅仅是可以访问数据的指针。为了方便遍历,所以在下面指针数组里面最后一个元素是哨兵元素,赋值以NULL,那么我们就可以遍历指针了。直到遍历的结束地点。无非就是一堆数据存放在内存上,然后咱们用什么方式去访问的问题。

这里写图片描述

struct hostent{  char *h_name;         /* Official name of host. */  char **h_aliases;     /* Alias list.指向指针数组  */  int h_addrtype;       /* Host address type. */  int h_length;         /* Length of address.  */  char **h_addr_list;   /* List of addresses from name server.IP地址多个,所以执行指针数组 */};struct hostent *gethostbyname (const char *__name);
struct addrinfo{  int ai_flags;         /* Input flags.  */  int ai_family;        /* Protocol family for socket.  */  int ai_socktype;      /* Socket type.  */  int ai_protocol;      /* Protocol for socket.  */  socklen_t ai_addrlen;     /* Length of socket address.  */  struct sockaddr *ai_addr; /* Socket address for socket.  */  char *ai_canonname;       /* Canonical name for service location.  */  struct addrinfo *ai_next; /* Pointer to next in list.  */};struct protoent{  char *p_name;         /* Official protocol name.  */  char **p_aliases;     /* Alias list.  */  int p_proto;          /* Protocol number.  */};struct servent{  char *s_name;         /* Official service name.  */  char **s_aliases;     /* Alias list.  */  int s_port;           /* Port number.  */  char *s_proto;        /* Protocol to use.  */};struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len, int __type);struct servent *getservent (void);struct servent *getservbyname (const char *__name, const char *__proto);int getaddrinfo (const char *__restrict __name,const char *__restrict __service,const struct addrinfo *__restrict __req,struct addrinfo **__restrict __pai);void freeaddrinfo (struct addrinfo *__ai);