- UDP协议通信分为客户端和服务端,先发送数据的设置为客户端,以下为客户端socket_udp通信代码:(client.cpp)
/*客户端*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUF_SIZE 1024
#define SERVER_IP "127.0.0.1" // 服务器IP地址:指要连接的服务器的地址
#define SERVER_PORT 8888 // 服务器端口号
int main() {
// 初始化Winsock库
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed!\n");
return -1;
}
// 创建套接字
SOCKET clientSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (clientSocket == INVALID_SOCKET) {
printf("Failed to create socket!\n");
WSACleanup();
return -1;
}
// 设置服务器地址信息
SOCKADDR_IN serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr(SERVER_IP);
serverAddr.sin_port = htons(SERVER_PORT);
// 发送数据
char sendData[BUF_SIZE] = "Hello, Server!";
//print("sent data!");
int ret = sendto(clientSocket, sendData, strlen(sendData), 0, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (ret == SOCKET_ERROR) {
printf("Failed to send data!\n");
closesocket(clientSocket);
WSACleanup();
return -1;
}
// 接收数据
char recvData[BUF_SIZE];
int serverAddrLen = sizeof(serverAddr);
ret = recvfrom(clientSocket, recvData, BUF_SIZE, 0, (SOCKADDR*)&serverAddr, &serverAddrLen);
if (ret == SOCKET_ERROR) {
printf("Failed to receive data!\n");
closesocket(clientSocket);
WSACleanup();
return -1;
}
//print("received data!");
// 处理接收到的数据
recvData[ret] = '\0';
printf("Received data from server: %s\n", recvData);
// 关闭套接字
closesocket(clientSocket);
// 清理Winsock库
WSACleanup();
return 0;
}
-
已有client.cpp,用Visual Studio打开代码文件,窗口左上角-“文件”-“新建”-“从现有代码创建项目”-“下一步”- 选择项目文件夹及文件路径 - 控制台应用程序 - 完成;
-
测试通讯: 打开网络调试助手,我用的是netassist5.0.3网络调试助手,
百度网盘链接:
链接:https://pan.baidu.com/s/1uhuGdy5MLE816bswBgd2Ow?pwd=wpjf
提取码:wpjf -
打开网络调试助手,输入代码中所写的IP地址及端口号,然后运行代码,可以看到代码和调试助手之间的通讯