包Linux发送UDP数据报:穿越网络的自由之旅(linux发udp)
随着网络技术的不断发展,用户现在可以在本地和远程机器之间发送UDP数据报。在Linux服务器上,发送和接收UDP数据报的过程是比较简单的。本文将介绍Linux服务器上使用UDP发送、接收数据报的具体如何配置和运行。
如果要用Linux服务器发送UDP数据报,首先,要确定Linux服务器是否支持和已启用UDP协议:
$ ls /proc/sys/net/ipv4/conf
如果结果表明Linux系统支持UDP协议并已启用,则可以继续运行以下命令查看该协议的配置:
$ cat /proc/sys/net/ipv4/conf/all/expect_udp
如果输出1,表明自启动开/关。
接下来,需要编写包含发送UDP数据报的程序,并保存为send_udp.c。例如:
#include
#include
#include
#include
#include
#include
#define PORT 9999
int main() {
int sfd;
struct sockaddr_in saddr;
socklen_t slen = sizeof(saddr);
char buffer[BUFSIZ];
// Create a socket
if ((sfd = socket(AF_INET, SOCK_DGRAM, 0))
perror(“socket”);
exit(EXIT_FAILURE);
}
// Set Server Address
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(“127.0.0.1”);
saddr.sin_port = htons(PORT);
// Prepare the data
memset(buffer, 0, BUFSIZ);
sprintf(buffer, “Hello UDP Server”);
// Send the data
if (sendto(sfd, buffer, BUFSIZ, 0, (struct sockaddr *) &saddr, slen)
perror(“sendto”);
exit(EXIT_FAILURE);
}
printf(“Message sent successfully!\n”);
close(sfd);
return 0;
}
保存后,编译send_udp.c:
$ gcc send_udp.c -o send_udp
让我们运行编译出来的可执行文件:
$ ./send_udp
然后,必须有一个用于接收UDP数据报的程序,并保存为recv_udp.c,如下所示:
#include
#include
#include
#include
#include
#include
#define PORT 9999
int main() {
int sfd;
struct sockaddr_in saddr;
socklen_t slen = sizeof(saddr);
char buffer[BUFSIZ];
// Create a socket
if ((sfd = socket(AF_INET, SOCK_DGRAM, 0))
perror(“socket”);
exit(EXIT_FAILURE);
}
// Set Server Address
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons(PORT);
// Bind Socket to port
if (bind(sfd, (struct sockaddr *) &saddr, slen)
perror(“bind”);
exit(EXIT_FAILURE);
}
// Receive data from socket
int n;
if ((n = recvfrom(sfd, buffer, BUFSIZ, 0, (struct sockaddr *) &saddr, &slen))
perror(“recvfrom”);
exit(EXIT_FAILURE);
}
printf(“Received Message: %s\n”, buffer);
close(sfd);
return 0;
}
保存后,编译recv_udp.c:
$ gcc recv_udp.c -o recv_udp
然后,运行编译出来的可执行文件:
$ ./recv_udp
此时,可以看到来自发送端的消息,表明本次UDP发送成功。
UDP在Linux系统中的实现让我们有机会穿越自由的网络,轻松建立服务器和客户端之间的连接,实现各种分布式应用的传输和收发数据,从而在构建分布式系统上更容易上手。