自动连接服务器



# -*- 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()


你可能感兴趣的:(自动连接服务器)