【问题标题】:How to get UDP pub/sub to work on mac osx?如何让 UDP pub/sub 在 mac osx 上工作?
【发布时间】: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 上工作,但是发送通过该地址的大量流量会降低我的网络速度。

标签: python macos sockets udp


【解决方案1】:

这是127.255.255.255。 127.0.0.1 工作正常。

Mac OS X 的环回接口doesn't support broadcasts.

【讨论】:

  • 您引用的链接还指出 Linux 不支持广播,但示例代码在那里工作。 (公平地说,环回接口不宣传广播功能。)切换到 127.0.0.1 会导致消息只显示在一个收件人身上。
  • @DarinMcGill 有 Python 本地主机/多播代码 here。
猜你喜欢
  • 2017-01-23
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2022-01-02
  • 2011-09-08
  • 1970-01-01
相关资源
最近更新 更多