我正在运行一个简单的关闭套接字侦听器,以接收包含指向localhost上端口5001(在此示例中)的json的UDP流:
import socket
import json
from contextlib import closing
def monitor_stream():
with closing(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', 5001))
while True:
data, addr = s.recvfrom(4096)
try:
data = data.decode('ascii')
data = json.loads(data)
except:
print 'Not valid JSON: ', data
我需要将流重新广播到另一个本地端口(在此示例中为5002),以便第二个程序可以实时访问数据。低延迟至关重要。下面的方法(在一段时间内使用socket.sendto())是可以接受的方法:
while True:
data, addr = s.recvfrom(4096)
s.sendto(data, ('localhost', 5002))
如果没有,我还能如何获得相同的结果?
我已经假定没有办法让多个程序同时以原始方式摄取原始流,因为它们起源于单播数据包,因此只有第一个绑定的套接字才能接收它们。
第二,我如何将同一流投射到多个端口(本地或非本地)?
我无法更改传入的流端口/设置。
答案 0 :(得分:0)
这是对socket.sendto()
的简单误用,只能在未连接的套接字上调用。
我正在尝试使用绑定侦听器发送摄取的流。
我似乎需要两个套接字对象才能重新广播到另一个地址。第二个套接字是未绑定的回显客户端,因为地址是在.sendto(string, address)