繁体   English   中英

共享UDP广播接收 - python示例

[英]Sharing UDP broadcast reception — python example

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

但是:这段代码“消耗”了端口,因为我无法打开另一个端口,第二次尝试绑定失败...而且我必须允许多个侦听器。 这是打开端口的代码:

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))

......但每次都失败了。 绑定到0.0.0.0工作,但也遇到“一个客户端”问题。 绑定到本地IP(例如192.168.1.100 )根本不起作用。 删除绑定根本不起作用。

任何人?

如果你需要多个进程来监听58083,你需要在socket.bind()之前在套接字上设置SO_REUSEADDR

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)

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

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#

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM