广播地址的坑

import socket

if __name__ == '__main__':
    # 创建udpsocket
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 设置socket选项,让其允许发送广播消息
    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)

    # 直接发送广播消息 255.255.255.255 : 广播地址
    udp_socket.sendto("大家好".encode("gbk"), ("192.168.43.255", 7999))

    # 关闭socket
    udp_socket.close()

无线局域网适配器 WLAN:

连接特定的 DNS 后缀 … … . :
本地链接 IPv6 地址… … . . : fe80::982d:fcf6:349d:ac13%8
IPv4 地址 … … … … : 192.168.43.196
子网掩码 … … … … : 255.255.255.0
默认网关… … … … . : 192.168.43.1

用上面的代码编译之后,广播失败,原因是开始的广播地址写的是255.255.255.255,广播地址是通过计算而得,而不是简单的一成不变的255.255.255.255,

广播域计算

用主机的IP地址与子网掩码进行与运算即可知道该主机属于哪一个广播域。例如:一台主机的IP地址为192.168.23.150,子网掩码为255.255.255.0,那么它所属的广播域就是192.168.23.150&255.255.255.0=192.168.23.0。那么其它的在广播域192.168.23.0内的所有主机就可以到该设备发送的广播包。如果把子网掩码改为255.255.0.0,那么它所属的广播域就是192.168.23.150&255.255.0.0=192.168.0.0。那么其它的在广播域192.168.0.0内的所有主机都可以收到该设备发送的广播包。

广播地址的计算

要想相同广播域内的其它主机能收到的广播帧,还需要在发送广播包的时候指定当前所属广播域内的广播地址。广播地址的计算方法为子网掩码取反再与广播域进行或运算。
例如:如果主机当前所属广播域为192.168.0.0,子网掩码为255.255.0.0,那么广播地址则为192.168.255.255。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值