UDP-SERVER端代码:
#include <WinSock2.h>
#include <iostream>
using namespace std;
void main()
{
//加载套接字,调用WSAStartup()
WORD wVersionRequested;
wVersionRequested=MAKEWORD(2,2);
WSADATA wsaData;
int err;
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0){
return;
}
if(LOBYTE(wsaData.wVersion)!=2||
HIBYTE(wsaData.wVersion)!=2){
WSACleanup();
return;
}
//调用socket函数创建套接字
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
//调用bind函数,将套接字在本地一个地址和端口上进行绑定
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//对于服务器端来说,它就是一个接收端,调用recvfrom 接收数据 区别:TCP是调用recv函数
SOCKADDR_IN addrClient;
char recvbuf[100];
int len=sizeof(SOCKADDR);
recvfrom(sockSrv,recvbuf,100,0,(SOCKADDR*)&addrClient,&len);
cout<<"来自客户端的消息:"<<recvbuf<<endl;
closesocket(sockSrv);//关闭套接字,释放给这个套接字分配的资源
WSACleanup();//终止对套接字库的使用
}
UDP-CLIENT端代码:
#include <WinSock2.h>
#include <iostream>
using namespace std;
void main()
{
//加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0){
return;
}
if(HIBYTE(wsaData.wVersion)!=2||
LOBYTE(wsaData.wVersion)!=2){
WSACleanup();
return;
}
//创建套接字
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
//发送数据,调用sendto函数
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int len=sizeof(SOCKADDR);
sendto(sockClient,"Hello!",strlen("Hello!")+1,0,(SOCKADDR*)&addrSrv,len);
closesocket(sockClient);
WSACleanup();
}