Linux UDP(User Datagram Protocol)服务器和客户端是基于UDP协议的网络通信程序。UDP是一种无连接的、不可靠的传输层协议,适用于对实时性要求高但对数据完整性要求相对较低的应用场景。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define BUF_SIZE 1024
int main() {
int serv_sock;
struct sockaddr_in serv_adr, clnt_adr;
socklen_t clnt_adr_sz;
char buf[BUF_SIZE];
if ((serv_sock = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket() error");
exit(1);
}
memset(&serv_adr, 0, sizeof(serv_adr));
serv_ad::sin_family = AF_INET;
serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_adr.sin_port = htons(6000);
if (bind(serv_sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr)) == -1) {
perror("bind() error");
exit(1);
}
while (1) {
clnt_adr_sz = sizeof(clnt_adr);
int str_len = recvfrom(serv_sock, buf, BUF_SIZE, 0, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);
sendto(serv_sock, buf, str_len, 0, (struct sockaddr*)&clnt_adr, clnt_adr_sz);
}
close(serv_sock);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define BUF_SIZE 1024
int main() {
int sock;
struct sockaddr_in serv_adr;
char buf[BUF_SIZE];
if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket() error");
exit(1);
}
memset(&serv_adr, 0, sizeof(serv_adr));
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_adr.sin_port = htons(6000);
while (1) {
fputs("Input message(Q to quit): ", stdout);
fgets(buf, BUF_SIZE, stdin);
int len = strlen(buf);
if (!strcmp(buf, "q\n") || !strcmp(buf, "Q\n"))
break;
sendto(sock, buf, len, 0, (struct sockaddr*)&serv_adr, sizeof(serv_adr));
int str_len = recvfrom(sock, buf, BUF_SIZE, 0, NULL, 0);
buf[str_len] = 0;
printf("Message from server: %s", buf);
}
close(sock);
return 0;
}
通过以上内容,您可以全面了解Linux UDP服务器和客户端的基础概念、优势、类型、应用场景以及常见问题及其解决方法。
领取专属 10元无门槛券
手把手带您无忧上云