zl程序教程

您现在的位置是:首页 >  后端

当前栏目

ipv6实现udp编程示例

编程 实现 示例 UDP IPv6
2023-06-13 09:15:24 时间

开发测试环境:WIN7SP1、VS2005

UdpServer.cpp

复制代码代码如下:

#include<iostream>
#include<WinSock2.h>
#include<ws2tcpip.h>

#pragmacomment(lib,"ws2_32.lib")

intmain(intargc,char**argv)
{
 usingnamespacestd;

 cout<<"ServerStart..."<<endl;

 WORDwVersion=0;
 WSADATAwsaData;
 memset(&wsaData,0,sizeof(wsaData));
 wVersion=MAKEWORD(2,2);

 if(0!=WSAStartup(wVersion,&wsaData))
 {
  return-1;
 }

 if(2!=LOBYTE(wsaData.wVersion)||2!=HIBYTE(wsaData.wVersion))
 {
  WSACleanup();
  return-1;
 }

 structaddrinfohints;
 structaddrinfo*res=NULL;
 memset(&hints,0,sizeof(hints));
 hints.ai_family=AF_UNSPEC;
 hints.ai_socktype=SOCK_DGRAM;
 hints.ai_protocol=IPPROTO_UDP;
 hints.ai_flags=AI_PASSIVE;

 if(0!=getaddrinfo("192.168.0.19","6677",&hints,&res))
 {
  WSACleanup();
  return-1;
 }

 SOCKETsk=socket(res->ai_family,res->ai_socktype,res->ai_protocol);
 bind(sk,res->ai_addr,res->ai_addrlen);

 charrecvBuf[1024]={"\0"};
 intlenRecv=0;

 structsockaddr_storagestorage;
 intlen=sizeof(storage);
 memset(&storage,0,len);

 lenRecv=recvfrom(sk,recvBuf,1024,0,(structsockaddr*)&storage,&len);
 cout<<"RecvFromClient:"<<recvBuf<<"Len:"<<lenRecv<<endl;
 sendto(sk,recvBuf,lenRecv,0,(structsockaddr*)&storage,len);

 WSACleanup();
 closesocket(sk);

 return0;
}

UdpClient.cpp

复制代码代码如下:

#include<iostream>
#include<WinSock2.h>
#include<ws2tcpip.h>

#pragmacomment(lib,"ws2_32.lib")

intmain(intargc,char**argv)
{
 usingnamespacestd;

 cout<<"ClientStart..."<<endl;

 WORDwVersion=0;
 WSADATAwsaData;
 memset(&wsaData,0,sizeof(wsaData));
 wVersion=MAKEWORD(2,2);

 if(0!=WSAStartup(wVersion,&wsaData))
 {
  return-1;
 }

 if(2!=LOBYTE(wsaData.wVersion)||2!=HIBYTE(wsaData.wVersion))
 {
  WSACleanup();
  return-1;
 }

 structaddrinfohints;
 structaddrinfo*res=NULL;
 memset(&hints,0,sizeof(hints));
 hints.ai_family=AF_UNSPEC;
 hints.ai_socktype=SOCK_DGRAM;
 hints.ai_protocol=IPPROTO_UDP;
 hints.ai_flags=AI_CANONNAME;

 if(0!=getaddrinfo("192.168.0.19","6677",&hints,&res))
 {
  WSACleanup();
  return-1;
 }

 SOCKETsk=socket(res->ai_family,res->ai_socktype,res->ai_protocol);
 bind(sk,res->ai_addr,res->ai_addrlen);

 charrecvBuf[1024]={"\0"};
 charsendBuf[1024]={"abcd"};
 intlen=res->ai_addrlen;
 intlenRecv=0;

 sendto(sk,sendBuf,strlen(sendBuf),0,res->ai_addr,len);
 lenRecv=recvfrom(sk,recvBuf,1024,0,res->ai_addr,&(len));
 cout<<"RecvFromServer:"<<recvBuf<<"Len:"<<lenRecv<<endl;

 WSACleanup();
 closesocket(sk);

 return0;
}