WEB开发网
开发学院软件开发VC 实例解析IPv6环境下的网络编程 阅读

实例解析IPv6环境下的网络编程

 2010-07-06 20:43:51 来源:WEB开发网   
核心提示:实例解析IPv6环境下的网络编程—实例篇IPv6程序相对于IPv4改动并不大,其中主要的改动就是地址结构与地址解析函数,实例解析IPv6环境下的网络编程(2),在RFC中详细说明了socket api 为适应IPv6所做的改动,而且windows平台与Linux平台在实现上也几乎是一样的,但是在使用通用函数

实例解析IPv6环境下的网络编程—实例篇

IPv6程序相对于IPv4改动并不大。其中主要的改动就是地址结构与地址解析函数。在RFC中详细说明了socket api 为适应IPv6所做的改动。而且windows平台与Linux平台在实现上也几乎是一样的。只不过头文件与支持程度等有所不同罢了(具体请参见RFC 2553与RFC 2292)。如读者有兴趣的话可以找RFC来看看,在这里就不再详细说明,只讲最简单的原理与例子,同时例出各主要socket api,如何使用,可以参考MSDN或是Linux中的MAN。

地址表示

IPv4使用32bits的地址表示,并有sockaddr_in和in_addr等结构应用于API中,而IPv6 使用128 bits 地址,也定义了本身的地址结构sockaddr_in6和in6_addr。

struct sockaddr_in {
  u_char  sin_len;
  u_char  sin_family;
  u_short  sin_port;
  struct  in_addr sin_addr;
  char    sin_zero[8];
};
struct in_addr {
    u_int32_t s_addr;
}
struct sockaddr_in6 {
 u_char    sin6_len;
 u_char    sin6_family;
 u_int16_t   sin6_port;
 u_int32_t   sin6_flowinfo;
 struct in6_addr sin6_addr;
 u_int32_t   sin6_scope_id;
}
struct in6_addr {
u_int8_t  __u6_addr8[16];
}

IP V4/IP V6专用函数

IPv6 API中一部分沿用了IPv4 API, 也新增了一些IPv6专用API,为使得程序具有更大的通用性,尽量避免使用IPv4专用函数,这些函数如下:

IP V4专用 是对应的IP v4/v6通用函数 功能说明
inet_aton( ) inet_ntop( ) 字符串地址转为IP地址
inet_ntoa( ) inet_pton( ) IP地址转为字符串地址
gethostbyname( ) Getipnodebyname( ) 由名字获得IP地址
gethostbyaddr( ) struct hostent *getipnodebyaddr( ) IP地址获得名字
  getaddrinfo( ) 获得全部地址信息
  getnameinfo( ) 获得全部名字信息
未发生变化的函数 功能说明
socket( ) 建立Socket
bind( ) Socket与地址绑定
send( ) 发送数据(TCP)
sendto( ) 发送数据(UDP)
receive( ) 接收数据(TCP)
recv( ) 接收数据(UDP)
accept( ) 接收连接
listen( ) 网络监听

如上表格所示,IP V4专用函数在IP V6环境下已经不能使用,他们一般有一个对应的IP V4/V6通用函数,但是在使用通用函数的时候需要一个协议类型参数(AF_INET/AF_INET6)。另外还增加了两个功能强大的函数getaddrinfo( )和getnameinfo( ),几乎可以完成所有的地址和名字转化的功能。

Tags:实例 解析 IPv

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接