| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | #!/usr/bin/env pythonfrom twisted.internet.protocol import Factoryfrom twisted.internet.endpoints import TCP4ServerEndpointfrom twisted.internet import reactorfrom twisted.internet.protocol import Protocolclass QOTD(Protocol):    def connectionMade(self):        self.transport.write("An apple a day keeps the doctor away\r\n".encode("utf-8"))        self.transport.loseConnection()class QOTDFactory(Factory):    def buildProtocol(self, addr):        return QOTD()# Why does this seem to be doing line buffering?# Because telnet defaults to line mode# ^] # telnet> mode character# or:# telnet> mode line# to toggle.  (The echo works correctly, it's the telnet client that's silly.)class Echo(Protocol):    def __init__(self, factory):        self.factory = factory    def connectionMade(self):        self.factory.numProtocols = self.factory.numProtocols + 1        self.transport.write(            "Welome! There are currently {0} open connections.\n".format(             self.factory.numProtocols ).encode('utf-8') )    def connectionLost(self, reason):        self.factory.numProtocols = self.factory.numProtocols - 1    def dataReceived(self, data):        self.transport.write(data)class EchoFactory(Factory):    def __init__(self):        self.numProtocols = 0    def buildProtocol(self, addr):        return Echo(self)endpoint = TCP4ServerEndpoint(reactor, 8007)endpoint.listen(EchoFactory())qotdpoint = TCP4ServerEndpoint(reactor, 8008)qotdpoint.listen(QOTDFactory())reactor.run()
 |