新闻中心

EEPW首页>EDA/PCB>设计应用> 基于C++中的IPv6网络程序设计

基于C++中的IPv6网络程序设计

作者: 时间:2012-09-12 来源:网络 收藏

三.独立于协议的地址及名称解析

由此可见在寻址时,IPv4使用16字节的SOCK_ADDR_IN 结构,则使用28 字节的SOCK_ADDR_IN6 结构。为了解决这个问题,中引入了新的寻址函数。 [Page]

1.getaddrinfo(),它提供独立于协议的名称解析:

int getaddrinfo(

const char *FAR *nodenAME,

const char FAR* SERvname,

const struct addrinfo FAR *hins,

struct addrinfo FAR *FAR *res

);

l 第一参数:nodename,以空字节结束的主机名或文字地址

l 第二参数:servname,包含端口或服务名(如:FTP,TELNET)的以空字节结束的字符串

l 第三个参数:hins 是一个结构(addrinfo),包含名称解析的执行方式选项

l 第四个参数:res ,用于返回 addrinfo 结构的一个或多个链表

结构addrinfo 的定义:

struct addrinfo{

int ai_flags;

int ai_family;

int ai_socktype;

int ai_protocol;

size_t ai_addrlen;

char *ai_cannoname;

struct sockaddr *ai_addr;

struct addrinfo *ai_next;

}

l ai_flags 选值:AI_PASSIVE:可以用来获取能够传递给bind函数的地址,此时nodename应设置为NULL,servname为欲绑定的端口;AI _CANONNAME 表示nodename 是主机名;AI_NUMBERICHOST 表示, nodename 是一个文字字符串地址(如:“192.168.0.1”)

l ai_family 选值:AI_INET或PF_INET(IPv4地址簇);AI_INET6或PF_INET6(地址簇);AI_UNSPEC(未指定,可能是IPv4或IPv6 地址簇)

l ai_socktype选值:SOCK_DGRAM(UDP类型套接字);SOCK_STREAM (TCP类 型套接字)

l ai_protocol 选值:IPPROTO_TCP (TCP/IP协议)

如果函数解析成功,解析后的地址将通过res返回。如果名称被解析为多个地址,则返回一个由ai_next 字段形成的链表。每个由名称解析的地址在ai_addr中表示,长度在ai_addrlen中表示。

2.getnameinfo()函数与getaddrinfo()相对应,功能相反。

. int getnameinfo(

const struct sockaddr FAR *sa,

socklen_t salen, [Page]

char FAR *host,

DWORD hostlen,

char FAR *serv,

DWORD servlen,

Int flags);

以上参数的含义比较明显,不再一一说明。

3.释放函数: freeaddrinfo(res);

四、兼容IPv4和IPv6的

兼容IPv4和IPv6的程序,显然涉及到两个部分:客户机和服务器。

在Windows编程中,Winsock是一种标准的API(应用程序接口),Winsock2版本已经发展成独立于协议的的接口,被广泛应用于Windows平台中。



评论


相关推荐

技术专区

关闭