#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <arpa/inet.h>
// 定义端口号和IP地址
#define PORT 8080
#define IP "127.0.0.1"
using namespace std;
// 发送端代码
void udp_client() {
int sock;
struct sockaddr_in servaddr;
// 创建 UDP 套接字
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
// 配置服务器地址信息
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(IP);
char buffer[1024];
cout << "Enter message: ";
cin.getline(buffer, 1024);
// 发送数据到服务器
sendto(sock, (const char *)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));
cout << "Message sent." << endl;
close(sock);
}
// 接收端代码
void udp_server() {
int sock;
char buffer[1024] = {0};
struct sockaddr_in servaddr, cliaddr;
// 创建 UDP 套接字
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
// 配置服务器地址信息
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(PORT);
// 绑定套接字到指定的端口
if (bind(sock, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
int len, n;
len = sizeof(cliaddr); // len 是客户端地址的长度
// 接收数据
n = recvfrom(sock, (char *)buffer, 1024, MSG_WAITALL, (struct sockaddr *)&cliaddr, &len);
buffer[n] = '\0';
cout << "Client : " << buffer << endl;
close(sock);
}
int main() {
int choice;
cout << "Choose option:\n1. Server\n2. Client\n";
cin >> choice;
if (choice == 1)
udp_server();
else if (choice == 2)
udp_client();
else
cout << "Invalid choice" << endl;
return 0;
}
UDP 套接字创建:
socket() 函数创建一个 UDP 套接字。AF_INET 表示使用 IPv4 地址族,SOCK_DGRAM 表示使用无连接的数据报套接字(即 UDP)。配置地址信息:
sockaddr_in 结构体用于存储 IP 地址和端口号。对于服务器端,INADDR_ANY 表示监听所有可用的网络接口。绑定套接字:
bind() 函数将套接字绑定到指定的端口上。发送和接收数据:
sendto() 函数向服务器发送数据。recvfrom() 函数从客户端接收数据,并获取客户端的地址信息。关闭套接字:
close() 函数关闭套接字,释放资源。主函数:
希望这段代码和解释对你有帮助!
上一篇:c++ 遍历vector
下一篇:c++并发编程
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站