当前位置:网站首页 > 数据科学与大数据 > 正文

udp局域网广播(udp广播发送数据)



  1. 广播的特点
    广播的UDP的特性之一,通过广播可以向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的IP地址,这个IP中子网内主机标志部分的二进制全部为1 (即点分十进制IP的最后一部分是255)。点分十进制的IP地址每一部分是1字节,最大值为255,比如:192.168.1.100

前两部分192.168表示当前网络是局域网
第三部分1表示局域网中的某一个网段,最大值为 255
第四部分100用于标记当前网段中的某一台主机,最大值为255
每个网段都有一个特殊的广播地址,即:192.168.xxx.255
广播分为两端,即数据发送端和数据接收端,通过广播的方式发送数据,发送端和接收端的关系是 1:N



发送广播消息的一端,通过广播地址,可以将消息同时发送到局域网的多台主机上(数据接收端)

在发送广播消息的时候,必须要把数据发送到广播地址上

广播只能在局域网内使用,广域网是无法使用UDP进行广播的

只要发送端在发送广播消息,数据接收端就能收到广播消息,消息的接收是无法拒绝的,除非将接收端的进程关闭,就接收不到了。

UDP的广播和日常生活中的广播是一样的,都是一种快速传播消息的方式,因此广播的开销很小,发送端使用一个广播地址,就可以将数据发送到多个接收数据的终端上,如果不使用广播,就需要进行多次发送才能将数据分别发送到不同的主机上。

  1. 设置广播属性
    基于UDP虽然可以进行数据的广播,但是这个属性默认是关闭的,如果需要对数据进行广播,那么需要在广播端代码中开启广播属性,需要通过套接字选项函数进行设置,该函数原型为:

C
1
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
参数:
sockfd:进行UDP通信的文件描述符
level: 套接字级别,需要设置为 SOL_SOCKET
optname:选项名,此处要设置udp的广播属性,该参数需要指定为:SO_BROADCAST
optval:如果是设置广播属性,该指针实际指向一块int类型的内存
该整型值为0:关闭广播属性
该整形值为1:打开广播属性
optlen:optval指针指向的内存大小,即:sizeof(int)
返回值:函数调用成功返回0,失败返回-1
3. 广播通信流程
如果使用UDP在局域网范围内进行消息的广播,一般情况下广播端只发送数据,接收端只接受广播消息。因此在数据接收端需要绑定固定的端口,广播端则不需要手动绑定固定端口,自动随机绑定即可。












数据发送端

创建通信的套接字

C
1
2
// 第二个参数是 SOCK_DGRAM, 第三个参数0表示使用报式协议中的udp
int fd = socket(AF_INET, SOCK_DGRAM, 0);
主动发送数据不需要手动绑定固定端口(自动随机分配就可以了),因此直接设置广播属性




C
1
2
int opt = 1;
setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt));
使用广播地址发送广播数据到接收端绑定的固定端口上




C
1
sendto();
关闭套接字(文件描述符)


C
1
close(fd);
数据接收端


创建通信的套接字

C
1
2
// 第二个参数是 SOCK_DGRAM, 第三个参数0表示使用报式协议中的udp
int fd = socket(AF_INET, SOCK_DGRAM, 0);
因为是被动接收数据的一端,所以必须要绑定固定的端口和本地IP地址




C
1
bind();
接收广播消息


C
1
recvfrom();
关闭套接字(文件描述符)


C
1
close(fd);
4. 通信代码
广播端



C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>














































int main()
{
// 1. 创建通信的套接字
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd == -1)
{
perror(“socket”);
exit(0);
}







 
  

接收端

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>















































int main()
{
// 1. 创建通信的套接字
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd == -1)
{
perror(“socket”);
exit(0);
}







 
  

作者: 苏丙榅
链接: https://subingwen.cn/linux/broadcast/
来源: 爱编程的大丙
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


到此这篇udp局域网广播(udp广播发送数据)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • bs4解析html(bs4解析数据)2025-07-12 12:36:10
  • 列表的增删改查笔记总结(数据表的增删改查)2025-07-12 12:36:10
  • 用dbc怎样打开数据库(dbca创建数据库后怎么查看)2025-07-12 12:36:10
  • oracle怎么写代码(oracle数据库怎么写代码)2025-07-12 12:36:10
  • Gaussdb数据库数据类型(gaussdb数据库怎么用)2025-07-12 12:36:10
  • linux怎么连接redis(linux怎么连接redis数据库)2025-07-12 12:36:10
  • redis哨兵模式数据不一致(redis哨兵模式连接命令)2025-07-12 12:36:10
  • 数据库 入门(数据库入门基础知识增删改查)2025-07-12 12:36:10
  • 进程控制(进程控制块是描述进程状态和特性的数据结构,一个进程)2025-07-12 12:36:10
  • spss27.0怎么做数据分析(spss21.0数据分析教程)2025-07-12 12:36:10
  • 全屏图片