UDP应用之广播
广播:一点发送,多点接收
广播地址:一个网段内有一个指定的广播地址,是该网段的最大地址。192.168.207.255
接收广播:
from socket import *
1.创建套接字
s = socket(AF_INET,SOCK_DGRAM)
2.设置套接字可以发送接收广播
s.setsockopt(SOL_SOCKET,SO_BROADCAST,1)
3.固定接收端口
s.bind(('0.0.0.0',9999))
4.接收广播
while True:
try:
msg,addr = s.recvfrom(1024)
print('从{}获取信息:{}'.format(addr,msg.decode()))
except (KeyboardInterrupt,SyntaxError):
raise
except Exception as e:
print(e)
源码:
from socket import *
import sys
HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT)
#创建套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
#消息收发
while True:
data = input('消息:')
sockfd.sendto(data.encode(),ADDR)
data,addr = sockfd.recvfrom(1024)
print('接收到:',data.decode())
sockfd.close()
发送广播:
from socket import *
1.设置目标地址
dest = ('192.168.207.255',9999)
s = socket(AF_INET,SOCK_DGRAM)
2.设置能够发送广播
s.setsockopt(SOL_SOCKET,SO_BROADCAST,1)
3.发送广播
while True:
sleep(2)
s.sendto('广播内容'.encode(),dest)
s.close()
源码:
from socket import *
#创建数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
#绑定服务端地址
server_addr = ('0.0.0.0',8888)
sockfd.bind(server_addr)
#消息收发
while True:
data,addr = sockfd.recvfrom(1024)
print('从%s收到%s'%addr,data.decode())
sockfd.sendto('收到你的消息'.encode(),addr)
sockfd.close()
广播风暴:一个网络中有大量的广播就会产生风暴占用大量带宽,影响正常的访问速度