Linux中的UDP多线程编程涉及使用用户数据报协议(UDP)在多个线程中进行网络通信。UDP是一种无连接的协议,它提供了一种不可靠的数据传输服务,但具有较低的延迟和较小的开销,适用于对实时性要求较高的应用。
以下是一个简单的Linux UDP多线程服务器和客户端的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
void *handle_client(void *arg) {
int sockfd = *(int*)arg;
struct sockaddr_in client_addr;
socklen_t addr_len = sizeof(client_addr);
char buffer[1024];
while (1) {
int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&client_addr, &addr_len);
if (n < 0) {
perror("recvfrom");
break;
}
buffer[n] = '\0';
printf("Received: %s\n", buffer);
sendto(sockfd, buffer, n, 0, (struct sockaddr*)&client_addr, addr_len);
}
return NULL;
}
int main() {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
return 1;
}
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("bind");
close(sockfd);
return 1;
}
pthread_t thread;
while (1) {
pthread_create(&thread, NULL, handle_client, &sockfd);
pthread_detach(thread);
}
close(sockfd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
return 1;
}
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
char buffer[1024];
while (1) {
printf("Enter message: ");
fgets(buffer, sizeof(buffer), stdin);
sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL);
if (n < 0) {
perror("recvfrom");
break;
}
buffer[n] = '\0';
printf("Received: %s", buffer);
}
close(sockfd);
return 0;
}
通过合理设计和优化,UDP多线程编程可以在Linux环境下实现高效的网络通信。
领取专属 10元无门槛券
手把手带您无忧上云