以下是一个简单的UDP客户端和服务端程序示例,用于发送字符。
UDP客户端程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888
int main() {
int sockfd;
struct sockaddr_in server_addr;
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
perror("inet_pton error");
exit(EXIT_FAILURE);
}
char message[100];
printf("Enter message: ");
fgets(message, sizeof(message), stdin);
// 发送消息到服务器
if (sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("sendto failed");
exit(EXIT_FAILURE);
}
close(sockfd);
return 0;
}
UDP服务端程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define SERVER_PORT 8888
int main() {
int sockfd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
// 创建UDP套接字
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(SERVER_PORT);
// 绑定套接字到指定的IP地址和端口号
if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
char buffer[100];
// 接收来自客户端的消息
if (recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_len) < 0) {
perror("recvfrom failed");
exit(EXIT_FAILURE);
}
printf("Received message: %s\n", buffer);
close(sockfd);
return 0;
}
你可以将上述代码分别保存为udp_client.c和udp_server.c,然后使用C编译器编译它们:
gcc udp_client.c -o udp_client
gcc udp_server.c -o udp_server
然后分别运行udp_client和udp_server,就可以发送字符消息了。请确保在运行UDP客户端之前先运行UDP服务端。