UDP广播
使用UDP除了可以建立快速的网络通讯之外,实际上还有一个主要的功能就是可以实现数据广播的操作,它可以实现一个局域网内的所有主机信息的广播处理。
如果要想实现UDP广播操作,则一定要在程序之中使用如下的方法进行定义:
- setsockopt(self , level:int, optnam:int, value:Union[int,bytes])
- level: 设置选项所在的协议层编号,有如下四个可用的配置项:
- socket.SOL_SOCKET: 基本套接字接口;
- socket.IPPROTO_IP: IPv4套接字接口;
- socket.IPPROTO_IPV6: IPV6套接字接口;
- socket.IPPROTO_TCP: TCP套接口
- optname: 设置选项名称,例如,如果要进行广播则可以使用“socket.BROADCAST”;
- value: 设置选项的具体内容;
如果要进行广播那么肯定要广播接收端,而接收端不一定可以接收到广播,但是只要你打开了接收端就可以接受到广播(手机短信或者是微信的公共提示信息)。
服务端
1 2 3 4 5 6 7 8 9
| import socket BROADCAST_SERVER_ADDR = ("<broadcast>",21567) def main(): with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as server_socket: server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) server_socket.sendto("我们不该故意逞强,说那些伤人的话".encode("UTF-8"),BROADCAST_SERVER_ADDR) if __name__ == "__main__": main()
|
客户端
1 2 3 4 5 6 7 8 9 10 11 12 13
| import socket BROADCAST_CLIENT_ADDR = ("0.0.0.0",21567) def main(): with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as client_socket: client_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) client_socket.bind(BROADCAST_CLIENT_ADDR) while True: message , address = client_socket.recvfrom(100) print("消息内容:%s、消息来源IP:%s、消息来源端口:%s" % (message.decode("UTF-8"),address[0],address[1])) if __name__ == "__main__": main()
|
测试结果
