Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Just like the server example above, there is a client example to. This should help you get started:</p> <ul> <li><a href="http://www.opendocs.net/python/twisted/howto/udp.html" rel="noreferrer">http://www.opendocs.net/python/twisted/howto/udp.html</a></li> <li><a href="http://twistedmatrix.com/documents/current/core/examples/echoclient_udp.py" rel="noreferrer">http://twistedmatrix.com/documents/current/core/examples/echoclient_udp.py</a></li> </ul> <p>Ok, here is a simple heart beat sender and receiver using datagram protocol.</p> <pre><code>from twisted.internet.protocol import DatagramProtocol from twisted.internet import reactor from twisted.internet.task import LoopingCall import sys, time class HeartbeatSender(DatagramProtocol): def __init__(self, name, host, port): self.name = name self.loopObj = None self.host = host self.port = port def startProtocol(self): # Called when transport is connected # I am ready to send heart beats self.loopObj = LoopingCall(self.sendHeartBeat) self.loopObj.start(2, now=False) def stopProtocol(self): "Called after all transport is teared down" pass def datagramReceived(self, data, (host, port)): print "received %r from %s:%d" % (data, host, port) def sendHeartBeat(self): self.transport.write(self.name, (self.host, self.port)) class HeartbeatReciever(DatagramProtocol): def __init__(self): pass def startProtocol(self): "Called when transport is connected" pass def stopProtocol(self): "Called after all transport is teared down" def datagramReceived(self, data, (host, port)): now = time.localtime(time.time()) timeStr = str(time.strftime("%y/%m/%d %H:%M:%S",now)) print "received %r from %s:%d at %s" % (data, host, port, timeStr) heartBeatSenderObj = HeartbeatSender("sender", "127.0.0.1", 8005) reactor.listenMulticast(8005, HeartbeatReciever(), listenMultiple=True) reactor.listenMulticast(8005, heartBeatSenderObj, listenMultiple=True) reactor.run() </code></pre> <p>The broadcast example simply modifies the above approach:</p> <pre><code>from twisted.internet.protocol import DatagramProtocol from twisted.internet import reactor from twisted.internet.task import LoopingCall import sys, time class HeartbeatSender(DatagramProtocol): def __init__(self, name, host, port): self.name = name self.loopObj = None self.host = host self.port = port def startProtocol(self): # Called when transport is connected # I am ready to send heart beats self.transport.joinGroup('224.0.0.1') self.loopObj = LoopingCall(self.sendHeartBeat) self.loopObj.start(2, now=False) def stopProtocol(self): "Called after all transport is teared down" pass def datagramReceived(self, data, (host, port)): print "received %r from %s:%d" % (data, host, port) def sendHeartBeat(self): self.transport.write(self.name, (self.host, self.port)) class HeartbeatReciever(DatagramProtocol): def __init__(self, name): self.name = name def startProtocol(self): "Called when transport is connected" self.transport.joinGroup('224.0.0.1') pass def stopProtocol(self): "Called after all transport is teared down" def datagramReceived(self, data, (host, port)): now = time.localtime(time.time()) timeStr = str(time.strftime("%y/%m/%d %H:%M:%S",now)) print "%s received %r from %s:%d at %s" % (self.name, data, host, port, timeStr) heartBeatSenderObj = HeartbeatSender("sender", "224.0.0.1", 8005) reactor.listenMulticast(8005, HeartbeatReciever("listner1"), listenMultiple=True) reactor.listenMulticast(8005, HeartbeatReciever("listner2"), listenMultiple=True) reactor.listenMulticast(8005, heartBeatSenderObj, listenMultiple=True) reactor.run() </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload