www.pudn.com > ipv6_send-recv.rar > recv.cpp
#include#include #include #include #pragma comment(lib,"WS2_32.lib")//引入库函数。 void main() { SOCKET sockfd; /* listen on sock_fd, new connection on new_fd */ WSADATA wsaData; // struct sockaddr_in6 my_addr; struct addrinfo hints,*res=NULL; struct ipv6_mreq command; char *dest_addr,*port; int rc; char Buf[65534]; int recvnum; int len; struct addrinfo *ai; // char size; if (WSAStartup(0x0101,&wsaData) != 0){ fprintf(stderr,"WSAStartup failed: %d\n",GetLastError()); } dest_addr="1:1:8::5"; port=NULL; memset(&hints,0,sizeof(hints)); hints.ai_family=AF_INET6;//指定用IPV6协议 hints.ai_socktype=SOCK_RAW; hints.ai_protocol=58;//用UDP hints.ai_flags=AI_PASSIVE;//IP用数字表示 rc=getaddrinfo(dest_addr,port,&hints,&res);//解析地址 if(rc!=0) { fprintf(stderr,"get failed: %d\n",GetLastError()); } if((sockfd=socket(AF_INET6,SOCK_RAW,58))==INVALID_SOCKET){ fprintf(stderr,"WSAStartup failed: %d\n",GetLastError()); } if(bind (sockfd,res->ai_addr,res->ai_addrlen)==SOCKET_ERROR) fprintf(stderr,"bind failed: %d\n",GetLastError()); /* command.ipv6mr_interface=4; memset(&command.ipv6mr_multiaddr,0,sizeof(command.ipv6mr_multiaddr)); command.ipv6mr_multiaddr.s6_addr[0]=255; command.ipv6mr_multiaddr.s6_addr[1]=2; command.ipv6mr_multiaddr.s6_addr[15]=2; if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char *)&command, sizeof(command)) < 0){ perror("setsockopt:IP_ADD_MEMBERSHIP"); } */ len=res->ai_addrlen; //recvnum=recvfrom(sockfd, Buf, sizeof(Buf),0,res->ai_addr,&len); // size=60*1024; //setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size)); printf("efejfiefiefie\n"); recvnum=recv(sockfd, Buf, sizeof(Buf),0); printf("%d\n",recvnum); }