# -*- coding:cp936 -*- #!/usr/bin/env python """ 客户端的几个事件响应 startConnecting 正在链接服务器 buildProtocol 已链接上服务器,建立Protocol clientConnectionLost 与主机失去链接 clientConnectionFailed 与主机链接失败 添加自动链接功能,当链接主机失败后;再次进行链接 当与主机链接失败后,再次进行链接; """ from twisted.internet.protocol import Protocol from twisted.internet.protocol import ClientFactory from twisted.internet.protocol import ReconnectingClientFactory from twisted.internet import reactor class EchoClient(Protocol): #创建链接时发送到服务器端 def connectionMade(self): for i in range(1,100): print 'send---',i self.transport.write("%s\n"%i) #接收到数据并关闭链接 def dataReceived(self, data): print "Received---", data # #关闭链接时调用 # def connectionLost(self,reason): # print "connection lost",reason class EchoClientFactory(ClientFactory): def startedConnecting(self,connector): print("Start to connect") def buildProtocol(self,addr): print("build protocol") return EchoClient() def clientConnectionLost(self,connector,reason): print("client connection lost" + str(reason)) # 与主机断开链接后,将自动进行链接 ReconnectingClientFactory.clientConnectionLost(self,connector,reason) def clientConnectionFailed(self,connector,reason): print("client connection failed:" + str(reason)) # 当链接失败后,自动进行链接 ReconnectingClientFactory.clientConnectionFailed(self,connector,reason) reactor.connectTCP("localhost",8001,EchoClientFactory()) reactor.run() #服务器端 from twisted.internet.protocol import Protocol,Factory from twisted.internet import reactor class Echo(Protocol): def dataReceived(self, data): # As soon as any data is received, write it back print self.transport.client print data self.transport.write(data) print '----------' class EchoFactory(Factory): def buildProtocol(self, addr): return Echo() reactor.listenTCP(8001, EchoFactory()) reactor.run()