socket编程总结(三) struct sockaddr_in /struct sockaddr_in6/struct addrinfo 结构体
2016-07-12 10:48
549 查看
//////////////////////////////////////lb
IPV4:
//struct sockaddr_in {
// __uint8_t sin_len;
// sa_family_t sin_family;//iPv4地址族
// in_port_t sin_port; //端口号
// struct in_addr sin_addr;//IPV4 address
// char sin_zero[8];
//};
////////////////////////////////////lb
IPV6:
// struct sockaddr_in6 {
// __uint8_t sin6_len; /* length of this struct(sa_family_t) */
// sa_family_t sin6_family;/* AF_INET6 (sa_family_t) */
// in_port_t sin6_port; /* Transport layer port # (in_port_t) */
// __uint32_t sin6_flowinfo;/* IP6 flow information */
// struct in6_addr sin6_addr;/* IP6 address */
// __uint32_t sin6_scope_id;/* scope zone index */
// };
////////////////////////////////////lb
getAddrInfo中的参数:
// struct addrinfo {
// int ai_flags;/* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
// int ai_family;/* PF_xxx */地址族,
// int ai_socktype;/* SOCK_xxx */套接字类型
// int ai_protocol;/* 0 or IPPROTO_xxx for IPv4 and IPv6 */协议类型
// socklen_t ai_addrlen; /* length of ai_addr */指向缓冲区的字节数
// char *ai_canonname;/* canonical name for hostname */主机的规范化名称
// struct sockaddr *ai_addr;/* binary address */指向sockaddr结构的指针。getaddrinfo返回的每个addrinfo结构内的ai_addr都指向一个filled-in套接字地址结构。
// struct addrinfo *ai_next;/* next structure in linked list */指向链表中下一个addrinfo结构的指针,如果是链表的最后一个addrinfo结构,则ai_next为NULL。
// };
////////////////////////////////lb
转换IPV4和IPV6:
/**
int getaddrinfo(
const char* nodename,//传的是主机地址的字符串;
const char* servname,
const struct addrinfo* hints,
struct addrinfo** res
);
* nodename:节点名可以是主机名,也可以是数字地址。(IPV4的10进点分,或是IPV6的16进制)
* servname:包含十进制数的端口号或服务名如(ftp,http)
* hints:是一个空指针或指向一个addrinfo结构的指针,由调用者填写关于它所想返回的信息类型的线索。
* res:存放返回addrinfo结构链表的指针,指向由一个或多个addrinfo结构体组成的链表,包含了主机的响应信息
* 返回值:成功返回0,失败返回非零的 sockets error code
*/
////////////////////////////////lb
IPV4:
//struct sockaddr_in {
// __uint8_t sin_len;
// sa_family_t sin_family;//iPv4地址族
// in_port_t sin_port; //端口号
// struct in_addr sin_addr;//IPV4 address
// char sin_zero[8];
//};
////////////////////////////////////lb
IPV6:
// struct sockaddr_in6 {
// __uint8_t sin6_len; /* length of this struct(sa_family_t) */
// sa_family_t sin6_family;/* AF_INET6 (sa_family_t) */
// in_port_t sin6_port; /* Transport layer port # (in_port_t) */
// __uint32_t sin6_flowinfo;/* IP6 flow information */
// struct in6_addr sin6_addr;/* IP6 address */
// __uint32_t sin6_scope_id;/* scope zone index */
// };
////////////////////////////////////lb
getAddrInfo中的参数:
// struct addrinfo {
// int ai_flags;/* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
// int ai_family;/* PF_xxx */地址族,
// int ai_socktype;/* SOCK_xxx */套接字类型
// int ai_protocol;/* 0 or IPPROTO_xxx for IPv4 and IPv6 */协议类型
// socklen_t ai_addrlen; /* length of ai_addr */指向缓冲区的字节数
// char *ai_canonname;/* canonical name for hostname */主机的规范化名称
// struct sockaddr *ai_addr;/* binary address */指向sockaddr结构的指针。getaddrinfo返回的每个addrinfo结构内的ai_addr都指向一个filled-in套接字地址结构。
// struct addrinfo *ai_next;/* next structure in linked list */指向链表中下一个addrinfo结构的指针,如果是链表的最后一个addrinfo结构,则ai_next为NULL。
// };
////////////////////////////////lb
转换IPV4和IPV6:
/**
int getaddrinfo(
const char* nodename,//传的是主机地址的字符串;
const char* servname,
const struct addrinfo* hints,
struct addrinfo** res
);
* nodename:节点名可以是主机名,也可以是数字地址。(IPV4的10进点分,或是IPV6的16进制)
* servname:包含十进制数的端口号或服务名如(ftp,http)
* hints:是一个空指针或指向一个addrinfo结构的指针,由调用者填写关于它所想返回的信息类型的线索。
* res:存放返回addrinfo结构链表的指针,指向由一个或多个addrinfo结构体组成的链表,包含了主机的响应信息
* 返回值:成功返回0,失败返回非零的 sockets error code
*/
////////////////////////////////lb
相关文章推荐
- 【Struts2】--项目环境搭建
- 各大推荐引擎 整理
- C++getint()读入优化
- 在java中,数据缓存的实现
- java自定义注解在excel导出时的使用
- mac THINKPHP Call to undefined function Think\imagettftext()
- 一个github上不错的工具类分享
- java题一(NK)
- Java实现酒店管理系统之Java swing酒店管理系统的实现及源码下载
- Asp.net Mvc对比Php的4大误解
- AtomicInteger的使用
- javacv windows下视频提取帧再转化为灰度直方图
- 使用git管理项目遇到的问题
- thinkphp中的url跳转用法分析
- 4000 基于python的selenium实现多窗口切换
- 在Django中使用DISTINCT
- C# 显示Summary便签问题
- c#注释 使用方法
- hql的条件查询
- springMVC,mybatis配置事务