C语言 双向UDP如何实现?需要代码
双向UDP可以通过创建两个UDP套接字来实现,一个用于发送数据,一个用于接收数据。以下是一个简单的C语言代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 1024
#define PORT 8888
int main() {
int send_sock, recv_sock;
struct sockaddr_in server_addr, client_addr;
char send_buffer[BUFFER_SIZE], recv_buffer[BUFFER_SIZE];
// 创建发送套接字
send_sock = socket(AF_INET, SOCK_DGRAM, 0);
if (send_sock == -1) {
perror("Failed to create send socket");
exit(EXIT_FAILURE);
}
// 创建接收套接字
recv_sock = socket(AF_INET, SOCK_DGRAM, 0);
if (recv_sock == -1) {
perror("Failed to create receive socket");
exit(EXIT_FAILURE);
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
// 绑定接收套接字到服务器地址
if (bind(recv_sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
perror("Failed to bind receive socket");
exit(EXIT_FAILURE);
}
while (1) {
// 接收数据
socklen_t addr_len = sizeof(client_addr);
ssize_t recv_len = recvfrom(recv_sock, recv_buffer, BUFFER_SIZE, 0, (struct sockaddr*)&client_addr, &addr_len);
if (recv_len == -1) {
perror("Failed to receive data");
exit(EXIT_FAILURE);
}
recv_buffer[recv_len] = '\0';
printf("Received: %s\n", recv_buffer);
// 发送数据
printf("Enter message to send: ");
fgets(send_buffer, BUFFER_SIZE, stdin);
sendto(send_sock, send_buffer, strlen(send_buffer), 0, (struct sockaddr*)&client_addr, addr_len);
}
// 关闭套接字
close(send_sock);
close(recv_sock);
return 0;
}
在这个代码示例中,我们首先创建了两个UDP套接字 send_sock 和 recv_sock,分别用于发送和接收数据。然后我们设置了服务器地址 server_addr,并将接收套接字 recv_sock 绑定到该地址。接下来,在一个无限循环中,我们先接收数据,然后通过发送套接字 send_sock 发送数据
原文地址: http://www.cveoy.top/t/topic/i0Sb 著作权归作者所有。请勿转载和采集!