Question
C++实现UDP客户端
Answer
下面是一个简单的C++ UDP客户端示例代码,它使用了POSIX网络编程接口。这个客户端可以发送消息到指定的UDP服务器,并接收来自服务器的响应。
请确保你的开发环境支持C++和POSIX标准库。
cpp
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
// 创建UDP套接字
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
std::cerr << "创建套接字失败" << std::endl;
return -1;
}
// 服务器地址结构
struct sockaddr_in servaddr;
std::memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080); // 服务器端口
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 服务器IP
// 准备发送的数据
const char *msg = "Hello, UDP Server!";
sendto(sockfd, msg, std::strlen(msg), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
// 接收服务器的响应
char buffer[1024];
socklen_t len = sizeof(servaddr);
ssize_t n = recvfrom(sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr*)&servaddr, &len);
if (n < 0) {
std::cerr << "接收数据失败" << std::endl;
} else {
buffer[n] = '\0'; // 确保字符串以NULL结尾
std::cout << "接收到来自服务器的响应: " << buffer << std::endl;
}
// 关闭套接字
close(sockfd);
return 0;
}
编译和运行
-
将上述代码保存为
udp_client.cpp
。 -
使用以下命令编译代码(在Linux系统上):
bashg++ udp_client.cpp -o udp_client
-
运行客户端程序:
bash./udp_client
注意事项
- 你需要确保在同一台机器上运行一个UDP服务器,或者修改
servaddr.sin_addr.s_addr
为其他可达的服务器IP。 - 服务器端口需要和客户端发送请求时指定的端口一致。
- 如果需要处理并发请求,可以考虑多线程编程或使用异步I/O。