diff options
Diffstat (limited to 'doc/core/howto/listings/udp/MulticastServer.py')
-rw-r--r-- | doc/core/howto/listings/udp/MulticastServer.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/doc/core/howto/listings/udp/MulticastServer.py b/doc/core/howto/listings/udp/MulticastServer.py new file mode 100644 index 0000000..0909e60 --- /dev/null +++ b/doc/core/howto/listings/udp/MulticastServer.py @@ -0,0 +1,28 @@ +from twisted.internet.protocol import DatagramProtocol
+from twisted.internet import reactor
+
+
+class MulticastPingPong(DatagramProtocol):
+
+ def startProtocol(self):
+ """
+ Called after protocol has started listening.
+ """
+ # Set the TTL>1 so multicast will cross router hops:
+ self.transport.setTTL(5)
+ # Join a specific multicast group:
+ self.transport.joinGroup("228.0.0.5")
+
+ def datagramReceived(self, datagram, address):
+ print "Datagram %s received from %s" % (repr(datagram), repr(address))
+ if datagram == "Client: Ping":
+ # Rather than replying to the group multicast address, we send the
+ # reply directly (unicast) to the originating port:
+ self.transport.write("Server: Pong", address)
+
+
+# We use listenMultiple=True so that we can run MulticastServer.py and
+# MulticastClient.py on same machine:
+reactor.listenMulticast(8005, MulticastPingPong(),
+ listenMultiple=True)
+reactor.run()
|