summaryrefslogtreecommitdiff
path: root/doc/core/howto/listings/udp/MulticastServer.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/core/howto/listings/udp/MulticastServer.py')
-rw-r--r--doc/core/howto/listings/udp/MulticastServer.py28
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()