新闻中心

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

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

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

一>客户机

对于客户机来说,不管是建立TCP/UDP 连接,它都应知道服务器的主机名或IP 地址,同时将服务器地址解析为IPv4或地址都可以,一般可以考虑一下步骤:

SOCKET s;

struct addrinfo,hints,*res=NULL;

char *szRemoteAddrESS;//主机名或IP 地址

char *szRemotePort;//端口号

int rc;

1.用getaddrinfo() 函数解析地址。hins结构中 使用AF_UNSPEC标志,便可以获得地址簇类型(IPv4或)。

memset(hintas,0,sizeof(hints));

hints.ai_family=AF_UNSPEC;

hints.ai_socktype=SOCK_STREAM;

hints.ai_protocol=IPPROTO_TCP;

rc=getaddrinfo(szRemoteAdddress,szRemotePort,hints,res);

if(rc==WSANO_DATA)

{// 无法解析,出错

}

用返回的addrinfo结构中的ai_family,ai_socketype,ai_protocol字段来创建套接字。

s=Socket(res->ai_family,ai_socktype,res->protocol);

if(s==INVALID_SOCKET)

{//创建套接字失败

}

2.使用返回的addrinfo结构中的ai_addr来调用其他函数(connect(),send()等).。

rc==connect(s,res->ai_addr,res->addrlen);

if(rc==SOCKET_error)

{//连接失败;

}

。。。//完成其他编程

二>服务器

服务器,应考虑到IPv4和都具有各自的堆栈;因此如果服务器希望能同时接受IPv4和IPv6的连接,就必须能同时创建IPv4和IPv6套接字;一般可以考虑一下步骤:

SOCKET socklisten[2];//*Socket变量

char *szPort=”8080”;//*端口

struct addinfo hints,*res=NULL,*ptr=NULL;

int rc,i=0;

1. 调用getaddrinfo()函数,该结构包含AI_PASSIVE,AF_UNSPEC标志,以及所需的套接字类型、协议及所需的本地端口(用来*和接受数据等)。函数将返回的两个addrinfo结构,分别可用于IPv4和IPv6*地址: [Page]

memset(hints,0,sizeof(hints));

hints.ai_family=AF_UNSPEC;

hints.ai_socktype=SOCK_STREAM;

hints.ai_protocol=IPPROTO_TCP;

hints.ai_flags=AI_PASSIVE;

rc=getaddinfo(NULL,szPort,hints,res);

if(rc!=0){//失败处理;}

ptr=res;

2. 用返回的addrinfo结构中的ai_family,ai_socketype,ai_protocol字段来创建套接字后;便可以使用addrinfo结构中的ai_addr 和ar_addrlen 字段调用绑定函数bind()。

while(ptr)

{

socklisten[i]=socket(ptr->ai_family,ptr->ai_socktype,ptr->ai_protocol);

if(socklisten[i]==INVALID_SOCKET){//创建失败处理;}

rc=bind(socklisten[i],ptr->ai_addr,ptr->ai_addrlen);

if(rc==SOCKET_Error){//绑定失败处理}

rc=listen(slisten[i],7)//开始*

if(rc==SOCKET_ERROR){//*失败处理}

i++;

ptr=ptr->ai_next;

}

。。。

//完成其他编程



评论


相关推荐

技术专区

关闭