py网络_UDP广播笔记

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
# coding : UTF-8
import socket
BROADCAST_SERVER_ADDR = ("<broadcast>",21567) # 客户端绑定地址
def main(): # 主函数
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as server_socket: # 建立客户端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
# coding : UTF-8
import socket
BROADCAST_CLIENT_ADDR = ("0.0.0.0",21567) # 客户端绑定地址
def main(): # 主函数
with socket.socket(socket.AF_INET,socket.SOCK_DGRAM) as client_socket: # 建立客户端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() # 调用主函数

测试结果


py网络_UDP广播笔记
https://blog.wangxk.cc/2020/02/06/py网络-UDP广播笔记/
作者
Mike
发布于
2020年2月6日
许可协议