1. 什么是UDP?
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输协议。它通过将数据打包成数据报,然后直接发送给接收方,不需要在建立连接和维护状态方面做额外的工作。UDP适用于需要高效传输数据,但可靠性要求相对较低的场景。
2. UDP客户端
2.1 实现步骤
以下是实现UDP客户端的简单步骤:
- 创建UDP套接字
- 设置服务器地址和端口号
- 构造发送数据报
- 发送数据报给服务器
- 关闭套接字
2.2 示例代码
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
int main() {
int sockfd;
char buffer[1024];
struct sockaddr_in servaddr;
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
std::cerr << "创建套接字失败" << std::endl;
return 1;
}
// 设置服务器地址和端口号
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(12345);
servaddr.sin_addr.s_addr = INADDR_ANY;
// 构造发送数据报
const char* message = "Hello, server!";
int message_length = strlen(message) + 1;
// 发送数据报给服务器
sendto(sockfd, message, message_length, 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
std::cout << "消息已发送给服务器" << std::endl;
// 关闭套接字
close(sockfd);
return 0;
}
3. UDP服务端
3.1 实现步骤
以下是实现UDP服务端的简单步骤:
- 创建UDP套接字
- 设置服务器地址和端口号
- 绑定套接字到服务器地址和端口号
- 接收数据报
- 处理接收到的数据报
- 关闭套接字
3.2 示例代码
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
int main() {
int sockfd;
char buffer[1024];
struct sockaddr_in servaddr, cliaddr;
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
std::cerr << "创建套接字失败" << std::endl;
return 1;
}
// 设置服务器地址和端口号
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(12345);
servaddr.sin_addr.s_addr = INADDR_ANY;
// 绑定套接字到服务器地址和端口号
if (bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
std::cerr << "绑定套接字失败" << std::endl;
close(sockfd);
return 1;
}
while (true) {
socklen_t len = sizeof(cliaddr);
// 接收数据报
int message_length = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&cliaddr, &len);
buffer[message_length] = '\0';
std::cout << "接收到客户端的消息: " << buffer << std::endl;
// 处理接收到的数据报
// ...
// 关闭套接字
close(sockfd);
}
return 0;
}
4. 总结
通过本文,我们了解了如何使用C++编写简单的UDP客户端和服务端。UDP提供了一种高效传输数据的方式,适用于可靠性要求相对较低的场景。在实际开发中,我们可以根据具体需求对UDP进行进一步扩展和优化。
本文来自极简博客,作者:后端思维,转载请注明原文链接:C 简单的UDP客户端与服务端