下面是关于Linux UDP服务端和客户端程序的实现的详细攻略。
1.UDP简介
UDP(User Datagram Protocol)用户数据报协议是一种无连接的协议,与TCP协议不同,UDP不会建立连接,发送数据时不会保证数据的可靠性以及顺序,甚至不保证是否到达对方。UDP在实时数据传输中非常常见,例如视频流、音频流等。
2.UDP服务端程序实现
下面的示例是UDP服务端程序的一个基本实现,包括创建Socket、绑定地址、接收数据、关闭Socket等操作。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 1234 //指定端口号
int main(void)
{
int sockfd;
char buffer[1024];
struct sockaddr_in server_addr, client_addr;
int n;
//创建Socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//绑定地址
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
//接收数据
while (1) {
printf("waiting for data...\n");
socklen_t length = sizeof(client_addr);
n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)&client_addr, &length);
buffer[n] = '\0'; // 添加字符串结尾符号
printf("server received: %s\n", buffer);
}
//关闭Socket
close(sockfd);
return 0;
}
3.UDP客户端程序实现
下面的示例是UDP客户端程序的一个基本实现,包括创建Socket、发送数据、关闭Socket等操作。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define PORT 1234 //指定端口号
int main(int argc, char *argv[])
{
int sockfd, n;
char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *server;
//创建Socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//获取服务端的IP地址
server = gethostbyname(argv[1]);
//配置服务端的地址信息
bzero((char *)&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&server_addr.sin_addr.s_addr, server->h_length);
server_addr.sin_port = htons(PORT);
//发送数据
printf("Please enter the message: ");
bzero(buffer, 1024);
fgets(buffer, 1024, stdin);
sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
//关闭Socket
close(sockfd);
return 0;
}
4.UDP服务端和客户端之间的交互示例
下面的示例演示了在Linux系统下,UDP服务端和客户端之间的交互。首先编译并启动服务端程序,然后启动客户端程序,客户端程序发送数据,服务端程序接收并输出。
服务端程序:
$ gcc udp_server.c -o udp_server
$ ./udp_server
waiting for data...
客户端程序:
$ gcc udp_client.c -o udp_client
$ ./udp_client localhost
Please enter the message: hello
服务端程序输出:
waiting for data...
server received: hello
可见,服务端程序成功接收到了来自客户端程序的数据。
5.总结
本文介绍了Linux下UDP服务端和客户端程序的基本实现,包括创建Socket、绑定地址、发送数据、接收数据等操作。同时,本文也提供了一个UDP服务端和客户端之间的交互示例,帮助读者更好地理解UDP通信的过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux UDP服务端和客户端程序的实现 - Python技术站