本主题已经涵盖了很多详细信息here,不幸的是,我仍遇到一些麻烦。使用Python订阅UDP组播
我试图订阅从我的网络上的Windows框中的运动捕捉数据流。 mo-cap服务器通过我的网络进行广播,我可以在我的OS X机器('目标')上使用wireshark获取数据。根据需要,我发现源自ip 204.102.224.2
(windows)的消息通过UDP在239.255.42.99
上广播,到端口1511
正在外出。
我的Python代码如下:
PORT = 1511
MULTICAST_ADDRESS = '239.255.42.99'
SOCKET_BUFSIZE = 1024
datasock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
datasock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
datasock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
datasock.bind((MULTICAST_ADDRESS, PORT))
mreq = struct.pack("=4sl", socket.inet_aton(MULTICAST_ADDRESS), socket.INADDR_ANY)
datasock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32)
datasock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
datasock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, SOCKET_BUFSIZE)
datasock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while 1:
data = datasock.recv(rx.MAX_PACKETSIZE)
packet = rx.unpack(data, version=version)
if type(packet) is rx.SenderData:
version = packet.natnet_version
#print("NatNet version received:", version)
if type(packet) in [rx.SenderData, rx.ModelDefs, rx.FrameOfData]:
packet_dict = packet._asdict()
all_bodies = packet_dict['rigid_bodies']
for body in all_bodies:
contortion = body._asdict()['orientation']
euler = Quat([elem for elem in contortion]).equatorial
我觉得我现在的问题是安全的忽略一些在循环的代码,因为它的一些我使用一个辅助库派生(optirx)。请注意,我并没有从所有选项开始,但决定将所有选项都包括在内,以查看应该保留的内容以及可以执行的操作。我尝试了各种组合和排列。我在OS X 10.10.3
那么你的问题是什么或你的问题在哪里?什么可行,什么不行? – jaybers
它的要点是我可以在windows中看到我的Mac上的多播广播,但从来没有能够用这段代码抓住它。我已经尝试了很多以上选项的组合。 – RYS