broadcast.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import socket
  2. import struct
  3. def receive_broadcast(port=9999, timeout=10):
  4. """
  5. 接收UDP广播数据
  6. Args:
  7. port: 监听的端口号
  8. timeout: 超时时间(秒)
  9. """
  10. # 创建UDP socket
  11. sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  12. sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  13. # 允许接收广播
  14. sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  15. # 绑定到所有网络接口
  16. sock.bind(('', port))
  17. sock.settimeout(timeout)
  18. print(f"正在监听广播端口 {port}...")
  19. try:
  20. while True:
  21. try:
  22. # 接收数据(最大缓冲区大小)
  23. data, addr = sock.recvfrom(1024)
  24. print(f"收到来自 {addr} 的广播消息:")
  25. print(f" 数据: {data.decode('utf-8', errors='ignore')}")
  26. # print(f" 原始数据: {data.hex()}")
  27. except socket.timeout:
  28. print("等待广播超时")
  29. break
  30. except KeyboardInterrupt:
  31. print("\n用户中断")
  32. break
  33. finally:
  34. sock.close()
  35. print("Socket已关闭")
  36. # 运行示例
  37. if __name__ == "__main__":
  38. receive_broadcast(port=37000, timeout=30)