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); 
}