📅  最后修改于: 2023-12-03 15:20:47.401000             🧑  作者: Mango
本文将介绍如何使用C语言实现UDP协议的服务器-客户端通信。UDP(User Datagram Protocol)是一种无连接的协议,适用于需要快速传输数据而不需要可靠性的场景。
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int socket_fd, n;
struct sockaddr_in server_addr, client_addr;
char buffer[BUFFER_SIZE];
// 创建UDP套接字
socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_fd < 0) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
// 绑定服务器地址和端口
if (bind(socket_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Failed to bind server address");
exit(EXIT_FAILURE);
}
while (1) {
socklen_t client_len = sizeof(client_addr);
// 接收来自客户端的数据
n = recvfrom(socket_fd, buffer, sizeof(buffer), 0, (struct sockaddr*)&client_addr, &client_len);
// 处理接收到的数据
printf("Received from client: %s\n", buffer);
// 向客户端发送响应
sendto(socket_fd, "Hello from server", strlen("Hello from server"), 0, (struct sockaddr*)&client_addr, client_len);
}
// 关闭套接字
close(socket_fd);
return 0;
}
上述代码中,我们先创建了一个UDP套接字(socket_fd = socket(AF_INET, SOCK_DGRAM, 0)
),然后绑定服务器的地址和端口(bind(socket_fd, (struct sockaddr*)&server_addr, sizeof(server_addr))
)。接着,我们通过循环来不断接收来自客户端的数据包,处理并向客户端发送响应。
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int socket_fd, n;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
// 创建UDP套接字
socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_fd < 0) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
while (1) {
printf("Enter message: ");
scanf("%s", buffer);
// 向服务器发送数据
sendto(socket_fd, buffer, strlen(buffer), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
// 接收服务器的响应
n = recvfrom(socket_fd, buffer, sizeof(buffer), 0, NULL, NULL);
buffer[n] = '\0';
// 处理接收到的响应
printf("Received from server: %s\n", buffer);
}
// 关闭套接字
close(socket_fd);
return 0;
}
上述代码中,我们创建了一个UDP套接字,然后通过循环不断向服务器发送数据,并接收服务器的响应。可以通过输入消息来测试客户端和服务器之间的通信。
通过上述的代码实现,我们可以在C语言中使用UDP协议实现服务器和客户端之间的通信。UDP协议以其速度快、开销小的特点,适用于一些对可靠性要求不高但实时性要求较高的应用场景。请根据实际需求,在现有代码的基础上进行适当的修改和扩展。