udp实现客户端服务端通信代码
时间: 2023-07-27 22:06:00 浏览: 52
以下是UDP实现客户端和服务端通信的基本代码,其中客户端发送一个字符串到服务端,服务端接收到字符串并返回一个响应,客户端再次接收到响应并输出到控制台。
服务端代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8888
int main() {
int server_fd, client_fd;
struct sockaddr_in server_addr, client_addr;
// 创建socket
if ((server_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
// 绑定地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind");
exit(EXIT_FAILURE);
}
// 接收数据
char buffer[1024];
int client_len;
while (1) {
memset(buffer, 0, sizeof(buffer));
client_len = sizeof(client_addr);
if (recvfrom(server_fd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_len) < 0) {
perror("recvfrom");
exit(EXIT_FAILURE);
}
printf("Received message from client: %s\n", buffer);
// 发送响应
if (sendto(server_fd, "Hello, client!", 14, 0, (struct sockaddr *)&client_addr, client_len) < 0) {
perror("sendto");
exit(EXIT_FAILURE);
}
}
return 0;
}
```
客户端代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8888
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <server_ip>\n", argv[0]);
return 0;
}
int client_fd;
struct sockaddr_in server_addr;
// 创建socket
if ((client_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
// 发送数据
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(argv[1]);
server_addr.sin_port = htons(PORT);
if (sendto(client_fd, "Hello, server!", 14, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("sendto");
exit(EXIT_FAILURE);
}
// 接收响应
char buffer[1024];
int server_len;
memset(buffer, 0, sizeof(buffer));
server_len = sizeof(server_addr);
if (recvfrom(client_fd, buffer, sizeof(buffer), 0, (struct sockaddr *)&server_addr, &server_len) < 0) {
perror("recvfrom");
exit(EXIT_FAILURE);
}
printf("Received message from server: %s\n", buffer);
return 0;
}
```
需要注意的是,在实际应用中,需要根据具体的需求和场景进行代码的修改和完善。