我正在尝试扭曲 python 的多播协议。这是一个简单的例子:
我创建了两个服务器,监听 224.0.0.1 和 224.0.0.2,如下所示:
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from twisted.application.internet import MulticastServer
class MulticastServerUDP(DatagramProtocol):
def __init__ (self, group, name):
self.group = group
self.name = name
def startProtocol(self):
print '%s Started Listening' % self.group
# Join a specific multicast group, which is the IP we will respond to
self.transport.joinGroup(self.group)
def datagramReceived(self, datagram, address):
print "%s Received:"%self.name + repr(datagram) + repr(address)
reactor.listenMulticast(10222, MulticastServerUDP('224.0.0.1', 'SERVER1'), listenMultiple = True)
reactor.listenMulticast(10222, MulticastServerUDP('224.0.0.1', 'SERVER2'), listenMultiple = True)
reactor.run()
然后我运行这段代码发送“HELLO”:
import socket
MCAST_GRP = '224.0.0.1'
MCAST_PORT = 10222
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.sendto("HELLO", (MCAST_GRP, MCAST_PORT))
结果相当混乱。有几种情况:
- 当我将所有组 IP 和 MCAST_GRP 设置为 224.0.0.1 时,两台服务器都收到了消息(预期) - 当我在发送脚本中将两台服务器的组 IP 设置为 224.0.0.1 和 MCAST_GRP 为 224.0.0.2(或不同于224.0.0.1),两台服务器都没有收到消息(预期)
- 当我将一台服务器的组 IP 设置为 224.0.0.1 和其他 224.0.0.2 时,发生了奇怪的事情。当我将 MCAST_GRP 设置为 224.0.0.1 或 224.0.0.2 时,我希望两台服务器中只有一台能够接收到消息。结果是两个服务器都收到了消息。我不确定发生了什么。有人可以解释一下吗?
注意:我在同一台机器上运行这些。
SL