windows 10
c++网络编程学习中,对一些关键的点总结一下。
结构体
sockaddr, sockaddr_in
sockaddr和sockaddr_in区别——http://kenby.iteye.com/blog/1149001
- sockaddr 和 sockaddr_in 同样都是为了处理网络通信的地址,包含了地址类别(familty),地址(ip),端口信息。
- sockaddr是给机器用的,sockaddr_in给程序猿使用,手动配置
- 大小相同,都是16bytes,可以强制转换,如(sockaddr *)&sock_addr_in_data
addrinfo
为什么需要addrinfo,stackoverflow上的讨论
配合getaddrinfo食用 - ws2tcpip.h,MS上的例子
addrinfo是一个链表结构,包含更多的地址信息,可以看成是为了准备socket的构件。
在使用getaddrinfo函数前,需要对addrinfo进行初始化
- windows上可使用ZeroMemory(&hint, sizeof(addrinfo))
- 或者使用memset(&hint, 0, sizeof(addrinfo))
getaddrinfo()
参数:getaddrinfo(pcstr server, pcstr service, addrinfo * hints, addrinfo **result)
- pcstr时const char *类型(没错的话)
- server,主机名(DESKTOP-XXX), 域名,点分十进制的ip地址
- Service Name, 如tcp,udp,或者端口
- hints,用于搜索过滤,如指定ai_family = AF_INET 或者 AF_INET6过滤ipv4和ipv6,等等
- result, 搜索的结果,链表的head
小结
如果地址比较简单,就手动配置sockaddr_in
否则就是用addrinfo( getaddrinfo函数 )来配置,通过hints来过滤信息,所有的结果保存在result链表中,