ツイストPythonのマルチキャストプロトコルを試しています。これは簡単な例です。
以下のように224.0.0.1と224.0.0.2をリッスンする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に設定し、もう一方のサーバーのグループIPを224.0.0.2に設定すると、奇妙なことが起こります。MCAST_GRPを224.0.0.1または224.0.0.2に設定すると、2つのサーバーのうち1つだけがメッセージを受信することを期待していました。その結果、両方のサーバーがメッセージを受信しました。何が起こっているのかわかりません。誰かがこれを説明できますか?
注:これらを同じマシンで実行しています。
SL