1. 广播(Broadcast)
广播的定义
广播是一种数据传输方式,数据包从一个源发送到网络中所有节点。广播是网络中的一对多通信方式,所有处于同一网络段的设备都能接收到广播数据包。
广播的特点
- 范围限制:广播数据包只在本地网络(LAN)传播,不会穿越路由器到达其他网络段。
- 地址格式:IPv4中,广播地址通常为子网的最高地址。例如,192.168.1.0/24网络的广播地址为192.168.1.255。
广播的Python实现
注:在下列示例代码中,先执行接收端代码再执行发送端代码。
发送端(broadcast_sender.py)
import socket
import struct
def get_local_ip():
"""
获取本地计算机的 IP 地址。
:return: 本地 IP 地址
"""
# 创建一个 UDP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
# 尝试连接一个外部的地址(不会实际发送数据)
s.connect(('8.8.8.8', 80))
local_ip = s.getsockname()[0]
except Exception:
local_ip = '127.0.0.1'
finally:
s.close()
return local_ip
def calculate_broadcast_address(ip, subnet_mask):
"""
计算给定 IP 地址和子网掩码的广播地址。
:param ip: IP 地址
:param subnet_mask: 子网掩码
:return: 广播地址
"""
ip_addr = struct.unpack('!I', socket.inet_aton(ip))[0]
mask = struct.unpack('!I', socket.inet_aton(subnet_mask))[0]
broadcast = ip_addr | ~mask
return socket.inet_ntoa(struct.pack('!I', broadcast & 0xFFFFFFFF))
def send_broadcast(message, port):
local_ip = get_local_ip()
print(f'本机IP地址为:{
local_ip}')
subnet_mask = '255.255.255.0' # 假设子网掩码为 255.255.255.0
# 计算广播地址
b

319

被折叠的 条评论
为什么被折叠?



