UDP广播

正在进行UDP广播的程序,以前一直用TCP,对UDP并不熟悉。

今天突然发现,点对点的UDP可以正常通信,但是UDP广播发送时,在Windows下正常,在Linux下无法广播发送,查看MSDN,sendto函数发现实现广播时,必须设置SO_BROADCAST属性,setsockopt(sock,SO_SOCKET,SO_BROADCAST,s,n);

在bind后设置无法正常发送,必须在发送前设置。

### UDP广播相关介绍 UDP(User Datagram Protocol,用户数据报协议)作为 TCP 的“轻量型伙伴”,以“简单、快速、无连接”为设计理念,为对延迟敏感的应用提供了高效传输方案,在实时通信、流媒体传输等场景中发挥着不可替代的作用 [^3]。 UDP 广播是网络通信的基础技术之一,信息被发送到指定的网络段,可供该段内的所有设备接收,类似于操场上喇叭播放铃声,无论当前有多少学生在场,铃声都以广播形式发送出去,区别只在于实际接收到广播的人数不同 [^1][^2]。 ### UDP广播技术原理 广播只需要知道对方的端口号,设定好端口后,套接字会自动遍历每一个 IP,向每一个 IP 地址发送报文。这好比知道一条电话线,但不知道电话线上哪个电话是朋友的,就把电话线上的每一个电话号码都打过去 [^4]。 ### UDP广播使用方法 #### 发送端代码示例(Python) ```python import socket # 创建 UDP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置套接字选项,允许广播 sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 广播地址和端口 broadcast_address = ('255.255.255.255', 12345) # 要发送的数据 message = "Hello, UDP Broadcast!" # 发送广播消息 sock.sendto(message.encode(), broadcast_address) # 关闭套接字 sock.close() ``` #### 接收端代码示例(Python) ```python import socket # 创建 UDP 套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定到广播地址和端口 sock.bind(('', 12345)) while True: # 接收数据 data, addr = sock.recvfrom(1024) print(f"Received from {addr}: {data.decode()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值