UDP套接字
服务端
#include <WinSock2.h>
#include<iostream>
#pragma comment(lib,"ws2_32.lib")
int main(){
//初始化套接字库
WORD wVersion;
WSADATA wsaData;
int err;
wVersion=MAKEWORD(1,1);
err=WSAStartup(wVersion,&wsaData);
if(err!=0){
return err;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){
WSACleanup();
return -1;
}
//创建套接字
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(600);
//绑定到本机6002端口
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//接受请求,处理请求
SOCKADDR_IN addrCli;
int len=sizeof(SOCKADDR);
char sendBuf[]="UDP Server...";
char recvBuf[100];
std::cout<<"Start UDP server with port 6002"<<std::endl;
while(true){
//接收数据
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrCli,&len);
std::cout<<"Recv:"<<recvBuf<<std::endl;
//发送数据
sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,len);
std::cout<<"Send:"<<sendBuf<<std::endl;
}
closesocket(sockSrv);
WSACleanup();
return 0;
}
客户端
#include <WinSock2.h>
#include<iostream>
#pragma comment(lib,"ws2_32.lib")
int main(){
//初始化套接字库
WORD wVersion;
WSADATA wsaData;
int err;
wVersion=MAKEWORD(1,1);
err=WSAStartup(wVersion,&wsaData);
if(err!=0){
return err;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){
WSACleanup();
return -1;
}
//创建UDP套接字
SOCKET sockCli=socket(AF_INET,SOCK_DGRAM,0);
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(600);
SOCKADDR_IN addrCli;
int len=sizeof(SOCKADDR);
char sendBuf[]="Send from udp client...";
char recvBuf[100];
std::cout<<"send to server:"<<sendBuf<<std::endl;
//发送数据
sendto(sockCli, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)& addrSrv, len);
recvfrom(sockCli, recvBuf, 100, 0, (SOCKADDR*)& addrSrv, &len);
std::cout << recvBuf << std::endl;
closesocket(sockCli);
WSACleanup();
system("pause");
return 0;
}