#include<iostream>
#include<winsock2.h>
#include <WS2tcpip.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")int initNetLib() {
//初始化网络库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
printf("WSAStartup failed with error: %d\n", err);
return err;
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
printf("Could not find a usable version of Winsock.dll\n");
WSACleanup();
return -1;
}
return 0;
}
int main() {
cout << "UDP Server" << endl;
//1.初始化网络库
initNetLib();
//2.创建套接字
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sockSrv) {
cout << "socket 创建不成功" << endl;
return -1;
}
//3.分配地址和端口
//htonl:host to net long
SOCKADDR_IN addrSrc;
addrSrc.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrc.sin_family = AF_INET;
addrSrc.sin_port = htons(6001);
if (SOCKET_ERROR == bind(sockSrv,((SOCKADDR *)&addrSrc),sizeof(SOCKADDR_IN))) {
cout << "bind 创建不成功" << endl;
return -1;
}
//4.等待接收数据
SOCKADDR_IN addrCli;//目的套接字的地址族
int len = sizeof(SOCKADDR_IN);
char recvBuf[100] = {0};
char sendBuf[100] = { 0 };
while (1) {
recvfrom(sockSrv, recvBuf,100,0, (SOCKADDR*)&addrCli,&len);
cout << recvBuf << endl;
sprintf_s(sendBuf, 100, "Ack:%s", recvBuf);
sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrCli, len);
}
//5.关闭套接字
closesocket(sockSrv);
return 0;
}
UDP Server代码
最新推荐文章于 2025-04-10 12:52:45 发布