【发布时间】:2015-08-31 16:17:47
【问题描述】:
我有一个简单的发布/订阅系统,可以使用 UDP 套接字在 linux 上运行,但不能在 Mac OS X(特别是 10.10.3)上运行。有什么我可以改变的,让它在我的 Mac 上工作吗?
pub.py:
import sys
import socket
sender = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sender.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while True:
line = sys.stdin.readline()
if not line: break
sender.sendto(line,("127.255.255.255",4321))
sub.py:
import sys
import socket
receiver = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
receiver.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)
receiver.bind(('',4321))
while True:
data,addr = receiver.recvfrom(1500)
sys.stdout.write(data)
为了运行它,我在不同的窗口中启动了 sub.py 的多个实例。在一个窗口中,我启动 pub.py 并在标准输入中输入内容(按回车键),它会显示在两个收件人身上。它适用于最新版本的 Linux Mint 和 Centos。
【问题讨论】:
-
将 receiver.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEPORT, 1) 添加到 sub.py 并将 pub.py 中的发送地址设置为 192.168.0.255 在我的 Mac 上工作,但是发送通过该地址的大量流量会降低我的网络速度。