一 服务器端
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream.h>
#include "tpipv6.h"
// 所需库连接
#pragma comment (lib,"Ws2_32.lib")
void main()
{
WSADATA wsaData; //版本协商
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
cout<<"装载socket失败!"<<endl;
return ;
}
SOCKET server_sock, client_sock; //服务器端和客户端套接字
//addrinfo结构体是为了消除IPv6协议与IPv4协议之间的差异,编制统一的程序而追加的结构。并且允许多个IPv4地址或IPv6地址链成链表
struct addrinfo server_addr , //服务器端地址信息
*res=NULL; //若有多个地址,res是地址信息链表指针
memset(&server_addr,0,sizeof(server_addr));//如果没有这句话就会出现绑定错误,也就是在调用getaddrinfo()之前该参数必须清0
server_addr.ai_family = AF_INET6; //地址簇,这里指定是ipv6协议,其值可以是 AF_INET:ipv4, AF_INET6:ipv6
server_addr.ai_socktype = SOCK_STREAM; //套接字类型,这里是流式,其值可以是 SOCK_STREAM:流式, SOCK_DGRAM:数据报, SOCK_RAW:原始套接字
server_addr.ai_protocol = IPPROTO_TCP; //传输层协议,这里是TCP协议,其值可以是: IPPROTO_TCP:TCP, IPPROTO_UDP:UDP, 若为0系统根据套接字类型自动选择
int result;
result = getaddrinfo("3ffe:3600:21:3000::1", "2000", &server_addr, &res); //解析本机地址, 服务器地址 监听端口