from twisted.internet.protocol import Protocol
from twisted.internet import reactor
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
class Echo(Protocol):
def __init__(self,factory):
self.factory=factory
def connectionMade(self):
self.factory.numProtocols=self.factory.numProtocols+1
self.transport.write("welcome!\nthere are currently %d open connections.\n"%(self.factory.numProtocols,))
def dataReceived(self,data):
mydata=data.strip()
if mydata!="quit" and mydata!="quit\r\n" and mydata!="quit\r":
self.transport.write(data)
else:
self.transport.write("byebye\n")
self.transport.numProtocols=self.factory.numProtocols-1
self.transport.loseConnection()
def connectionLost(self, reason):
self.factory.numProtocols = self.factory.numProtocols - 1
class EchoFactory(Factory):
numProtocols=0
def __init__(self):
self.myfactory=self
def buildProtocol(self,addr):
return Echo(self.myfactory)
endpoint=TCP4ServerEndpoint(reactor,8001)
endpoint.listen(EchoFactory())
reactor.run()
输入quit退出连接,统计连接数量。
buildProtocol方法的默认行为是调用protocol属性产生一个Protocol实例,设置factory属性指向factory
本博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/myhaspl/
$ telnet 120.55.*.* 8001
Trying 120.55.*.*...
Connected to 120.55.*.*.
Escape character is '^]'.
welcome!
there are currently 1 open connections.
hello
hello
world
world
myhaspl
myhaspl
quit
byebye
Connection closed by foreign host.
$ telnet 120.55.*.* 8001
Trying 120.55.*.*...
Connected to 120.55.*.*
Escape character is '^]'.
welcome!
there are currently 1 open connections.
$ telnet 120.55.*.* 8001
Trying 120.55.*.*...
Connected to 120.55.*.*.
Escape character is '^]'.
welcome!
there are currently 2 open connections.
lll
lll