06. UDP广播

发布时间 2023-11-02 18:13:26作者: 星河映梦

一、什么是广播

  UDP 广播是一种网络通信的方式,在广域网或局域网中,UDP 广播可以向多个目标主机发送数据包,使得网络中的所有设备都能接收到广播消息。使用广播之后,socket 只需要发送一次 UDP 数据,就可以发送给本局域网中的任何一台电脑相同的数据。

二、UDP广播的流程

import socket                       # 导入socket模块

ss =  socket.socket()               # 创建服务器套接字
ss.setsockopt()                     # 设置UDP套接字允许广播
ss.bind()                           # 套接字与地址绑定

while True:                         # 监听连接
   cs = ss.recvfrom()/ss.sendto()   # 对话(接收/发送)

ss.close()                          # 关闭服务器套接字
from socket import socket
from socket import AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_BROADCAST
from time import ctime

HOST = "127.0.0.1"
PORT = 8080
ADDRESS = (HOST, PORT)

BROADCAST_HOST = "<broadcast>"                                              # <broadcast>会自动改为本局域网的广播ip
BROADCAST_PORT = 8086
BROADCAST_ADDRESS = (BROADCAST_HOST, BROADCAST_PORT)

udp_server = socket(AF_INET, SOCK_DGRAM)                                    # 创建服务器套接字
udp_server.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)                          # 设置UDP允许广播
udp_server.bind(ADDRESS)                                                    # 套接字与地址绑定

while True:                                                                 # 通信循环
    content = input("请输入你要广播的内容:")
    udp_server.sendto(f"【{ctime()}】{content}".encode("utf-8"), BROADCAST_ADDRESS)  # 服务端发送广播内容

    data, client_addr = udp_server.recvfrom(1024)                           # 服务端接收消息,单次最大接收为1024个字节
    print(f"收到客户端【{client_addr}】返回的数据:{data.decode('utf-8')}")

udp_server.close()                                                          # 关闭服务器套接字