簡體   English   中英

Python 多播未在 BusyBox 上接收數據

[英]Python Multicast Not Receiving Data on BusyBox

我們正在嘗試讓我們的 Python 應用程序通過 UDP 響應多播請求。 我們有這個 Python 代碼,它在運行 Raspian 的 Raspberry Pi 上運行得非常好,但我們已經嘗試將它移植到我們的 BusyBox 環境中,但它永遠不會響應請求(除非它在本地子網上)。

import socket
import struct

host = '172.20.0.56'
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 49999
IS_ALL_GROUPS = True

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
    # on this port, receives ALL multicast groups
    sock.bind(('', MCAST_PORT))
else:
    # on this port, listen ONLY to MCAST_GRP
    sock.bind((MCAST_GRP, MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(host))

sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, 
                   socket.inet_aton(MCAST_GRP) + socket.inet_aton(host))
while True:
  print(sock.recv(1024))

Netstat 顯示正在設置成員資格組:

$ netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      224.1.1.1

IP A 顯示板上支持 MULTICAST。 我們可以看到組中的其他機器收到了消息。 還有什么我們可以嘗試的嗎?

在發布此條目后立即找到答案。

我們必須在文件 /usr/lib/sysctl.d/50-default.conf 中將 net.ipv4.conf.all.rp_filter = 2 更改為 net.ipv4.conf.all.rp_filter = 0

它現在按預期工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM