struct addrinfo结构体获取ip和port
来源:互联网 发布:微信域名要备案吗 编辑:程序博客网 时间:2024/06/06 13:01
表头文件: #include<netdb.h>
struct addrinfo
{
int ai_flags;
int ai_family; //AF_INET,AF_INET6,UNIX etc
int ai_socktype; //STREAM,DATAGRAM,RAW
int ai_protocol; //IPPROTO_IP, IPPROTO_IPV4, IPPROTO_IPV6 etc
size_t ai_addrlen;//length of ai_addr
char* ai_canonname; //full hostname
struct sockaddr* ai_addr; //addr of host
struct addrinfo* ai_next;
}
value of ai_falgs:
AI_PASSIVE: Socket address is intended for `bind'.
AI_CANONNAME:Request for canonical name.
AI_NUMERICHOST: Don't use name resolution.
AI_V4MAPPED: IPv4 mapped addresses are acceptable.
AI_ALL: Return IPv4 mapped and IPv6 addresses.
AI_ADDRCONFIG:Use configuration of this host to choose
定义函数:
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints,
struct addrinfo **result );
函数说明:
getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个sockaddr 结构的链而 不是一个地址清单。它具有协议无关性。
hostname:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
service:一个服务名或者10进制端口号数串。
hints:可以是一个空指针,也可以是一个指向某个addrinfo结构的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。举例来说:如果指定的服务既支持TCP也支持UDP,那么调用者可以把hints结构中的ai_socktype成员设置成SOCK_DGRAM使得返回的仅仅是适用于数据报套接口的信息。返回0: 成功,返回非0: 出错。
定义函数:const char *gai_strerror( int error );
函数说明:
该函数以getaddrinfo返回的非0错误值的名字和含义为他的唯一参数,返回一个指向对应的出错信息串的指针。
定义函数: void freeaddrinfo( struct addrinfo *ai );
函数说明:
由getaddrinfo返回的所有存储空间都是动态获取的,这些存储空间必须通过调用freeaddrinfo返回给系统。
例子:
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- int
- lookup_host (const char *host)
- {
- struct addrinfo hints, *res;
- int errcode;
- char addrstr[100];
- void *ptr;
- memset (&hints, 0, sizeof (hints));
- hints.ai_family = PF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_flags |= AI_CANONNAME;
- errcode = getaddrinfo (host, NULL, &hints, &res);
- if (errcode != 0)
- {
- perror ("getaddrinfo");
- return -1;
- }
- printf ("Host: %s\n", host);
- while (res)
- {
- inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100);
- switch (res->ai_family)
- {
- case AF_INET:
- ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr;
- break;
- case AF_INET6:
- ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;
- break;
- }
- inet_ntop (res->ai_family, ptr, addrstr, 100);
- printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4,
- addrstr, res->ai_canonname);
- res = res->ai_next;
- }
- return 0;
- }
- int
- main (int argc, char *argv[])
- {
- if (argc < 2)
- exit (1);
- return lookup_host (argv[1]);
- }
- struct addrinfo结构体获取ip和port
- struct addrinfo结构体
- struct addrinfo结构体详解
- Linux下网络相关结构体 struct addrinfo
- socket编程总结(三) struct sockaddr_in /struct sockaddr_in6/struct addrinfo 结构体
- addrinfo结构体详解
- addrinfo的结构体
- JAVA获取本地IP和PORT
- addrinfo结构体与getaddrinfo函数
- addrinfo结构体与getaddrinfo函数
- 获取Ip、Port
- UDP struct ifreq和struct ifconf获取IP地址
- socket编程相关的结构体和字节序转换、IP、PORT转换函数
- 结构体 struct{} 和 typedef struct{}
- addrinfo& sockaddr结构解析
- linux socket编程client获取使用的ip和port
- 通过网络socket获取对方 ip 和port
- socket编程之addrinfo结构体与getaddrinfo函数
- 程序员必知之前端演进史
- Java 中 Iterator<Object>使用
- ObjectStream的使用
- Qt Creator程序发布(动态编译)
- iOS --自定义xib
- struct addrinfo结构体获取ip和port
- 字符数组、冒泡排序
- linux 网络相关
- hadoop-io-序列化机制与jdk序列化机制对比
- HttpClient 文件
- ExecutorService线程池讲解
- C# 的三种序列化方法
- Java笔记
- 三星电视联合滴滴打造加长悍马移动影院,继续实践跨界营销之道