UDP(User Datagram Protocol)是一种无连接的传输层协议,提供面向事务和不可靠的数据包传输服务。C语言可以通过socket编程实现UDP通信。下面是一个简单的C语言程序示例,使用socket编程实现UDP通信。
发送端程序:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define SERVER_PORT 8888
int main(int argc, const char * argv[]) {
int sockfd;
struct sockaddr_in server_addr;
char buf[256] = "Hello, server";
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
perror("sendto failed");
exit(EXIT_FAILURE);
}
printf("Message sent to the server\n");
close(sockfd);
return 0;
}
接收端程序:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define SERVER_PORT 8888
int main(int argc, const char * argv[]) {
int sockfd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char buf[256];
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
memset(buf, 0, sizeof(buf));
if (recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *) &client_addr, &client_len) < 0) {
perror("recvfrom failed");
exit(EXIT_FAILURE);
}
printf("Message received from client: %s\n", buf);
close(sockfd);
return 0;
}
以上程序示例中,发送端程序使用sendto函数将数据包发送给指定IP地址和端口号的接收端程序,接收端程序使用recvfrom函数从socket接收数据包并输出到控制台。其中,sockfd为socket句柄,server_addr和client_addr为目标地址和来源地址结构体,buf为发送的数据缓冲区。使用socket编程实现UDP通信需要注意设定正确的IP地址、端口号和套接字选项,实现相应的错误处理机制以保证程序的稳定性。UDP(User Datagram Protocol)是一种无连接的传输层协议,提供面向事务和不可靠的数据包传输服务。C语言可以通过socket编程实现UDP通信。下面是一个简单的C语言程序示例,使用socket编程实现UDP通信。
发送端程序:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define SERVER_PORT 8888
int main(int argc, const char * argv[]) {
int sockfd;
struct sockaddr_in server_addr;
char buf[256] = "Hello, server";
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
perror("sendto failed");
exit(EXIT_FAILURE);
}
printf("Message sent to the server\n");
close(sockfd);
return 0;
}
接收端程序:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define SERVER_PORT 8888
int main(int argc, const char * argv[]) {
int sockfd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len = sizeof(client_addr);
char buf[256];
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
memset(buf, 0, sizeof(buf));
if (recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *) &client_addr, &client_len) < 0) {
perror("recvfrom failed");
exit(EXIT_FAILURE);
}
printf("Message received from client: %s\n", buf);
close(sockfd);
return 0;
}
以上程序示例中,发送端程序使用sendto函数将数据包发送给指定IP地址和端口号的接收端程序,接收端程序使用recvfrom函数从socket接收数据包并输出到控制台。其中,sockfd为socket句柄,server_addr和client_addr为目标地址和来源地址结构体,buf为发送的数据缓冲区。使用socket编程实现UDP通信需要注意设定正确的IP地址、端口号和套接字选项,实现相应的错误处理机制以保证程序的稳定性。