python 学习--广播小程序


socket其他属性
s.fileno() 获取套接字的文件描述符 0, 1, 2 表示标准输入,标准输出,错误输出
            *描述符: 每个IO操作,系统都会分配一个不同的证书与之对应,该数即为此IO的描述符
s.type  打印套接字的类型
s.getsockname() 获取绑定的地址
s.getpeername()  打印客户端的地址和端口

s.setsockopt(level, optname, value)    设置套接字选项s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.getsockopt(level, optname)        获取套接字选项值

UDP应用之广播
要讲套接字设置为允许接收广播

如果要发送广播,即发送给广播地址: x.x.x.255

广播风暴: 当在一个网络中大量发送广播会占用大量带宽

 

下面实现udp广播小程序:

接收端程序:

from socket import *

HOST = ''
PORT = 9999

s = socket(AF_INET, SOCK_DGRAM)

#设置套接字,让其允许接收广播
s.setsockopt(SOL_SOCKET, SO_BROADCAST,1)
#设置可以socket释放后可以立即重用
s.setsockopt(SOL_SOCKET, SO_REUSEADDR,1)

#固定接收端的端口号;
s.bind((HOST,PORT))

while True:
    try:
        message,addr = s.recvfrom(4096)
        print("from {} copy message:{}".format(addr, message.decode()))
        s.sendto("copy......".encode(), addr)
    except (KeyboardInterrupt, SyntaxError):
        raise
    except Exception as e:
        print(e)

s.close()

广播发送端程序:

from socket import *
from time import sleep

#发送广播的地址
dest = ('192.168.10.255',9999)

s = socket(AF_INET,SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST,1)

while True:
    sleep(1)
    s.sendto('I love China....'.encode(), dest)
    data, addr = s.recvfrom(1024)
    print("Received from {}, Data:{}".format(addr, data.decode()))

s.close()

效果:

from ('192.168.10.11', 38036) copy message:I love China....
from ('192.168.10.11', 46767) copy message:I love China....
from ('192.168.10.11', 46767) copy message:I love China....
from ('192.168.10.11', 46767) copy message:I love China....
from ('192.168.10.11', 46767) copy message:I love China....
from ('192.168.10.11', 46767) copy message:I love China....
from ('192.168.10.11', 46767) copy message:I love China....

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值