共享UDP广播接收——python示例

共享UDP广播接收——python示例,python,udp,broadcast,Python,Udp,Broadcast,我有一些数据的UDP广播。我能够在python 2.6.1中,在OSX 10.6.8下打开以下客户端,并且它可以正常工作。我能抓住数据,一切都很好 但是:这段代码“消耗”了端口,因为我无法打开另一个端口,第二次尝试绑定失败。。。我必须允许不止一个听众。以下是打开端口的代码: import select, socket port = 58083 # port msg is broadcast upon # Create listening port # --------------

我有一些数据的UDP广播。我能够在python 2.6.1中,在OSX 10.6.8下打开以下客户端,并且它可以正常工作。我能抓住数据,一切都很好

但是:这段代码“消耗”了端口,因为我无法打开另一个端口,第二次尝试绑定失败。。。我必须允许不止一个听众。以下是打开端口的代码:

import select, socket
port = 58083        # port msg is broadcast upon

# Create listening port
# ---------------------
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
    s.bind(('', port))
except:
     print 'failure to bind'
    s.close()
    raise
s.setblocking(0)
…由于UDP用于向多个客户端广播(除其他外),我认为我做错了什么。我就是不知道是什么

我在activestate上找到了一个示例,其中建议:

s.bind(('<broadcast>',port))
s.bind(('',端口))
…但这每次都失败了。绑定到
0.0.0.0
是可行的,但也存在“一个客户端”的问题。绑定到本地IP(例如,
192.168.1.100
)根本不起作用。移除绑定根本不起作用


有人吗?

如果需要多个进程来侦听58083,则需要在
socket.bind()之前在socket上设置
SO\u REUSEADDR

在底部添加了一个无限循环,并在我的linux服务器上运行了两次(一次作为root用户,另一次作为unpriv用户),我看到:


不工作:
socket.error:[Errno 48]地址已在使用中
是的,我仍然没有看到以同一用户身份运行时出现问题,我不确定这是否会影响OS X。。。真是太好了old@fyngyrz您需要在所有要共享同一端口的套接字上设置该选项,而不仅仅是第二个和后续端口。对于后代来说,这个答案是正确的,只是OS X已损坏,无法正确处理广播。因此,我接受它,因为它是正确的,除了OS X用户。绑定到192.168.1.100会在启动第二个实例时返回“socket.error[Errno 48]Address ready in use”。删除与192.168.1.100的绑定将导致没有广播接收。删除以“”作为ip地址的绑定将导致无法接收。添加推荐行不会影响客户端1,但客户端2会报告错误,如下所述。使用广播作为字符串获取错误49无法分配请求的地址
import select, socket
port = 58083        # port msg is broadcast upon

# Create listening port
# ---------------------
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # Allow other processes to
                                                         #    bind to port
try:
    s.bind(('0.0.0.0', port))
except:
     print 'failure to bind'
    s.close()
    raise
s.setblocking(0)
root@tsunami# lsof | grep 58083
python    25908       root    3u     IPv4             284835      0t0        UDP *:58083
python    25945   mpenning    3u     IPv4             284850      0t0        UDP *:58083
root@tsunami#