from twisted.internet import reactor, defer, protocol class CallbackAndDisconnectProtocol(protocol.Protocol): def connectionMade(self): self.factory.deferred.callback("") self.transport.loseConnection() class ConnectionTestFactory(protocol.ClientFactory): protocol = CallbackAndDisconnectProtocol def __init__(self): self.deferred = defer.Deferred() def clientConnectionFailed(self, connector, reason): self.deferred.errback(reason) def conteste(host, port): Fabrica = ConnectionTestFactory() reactor.connectTCP(host, port, Fabrica) return Fabrica.deferred def sucesso(result,port): print "conexao feita com sucesso na porta %i" % port reactor.stop() porta = 80 conn = conteste('google.com',porta) conn.addCallback(sucesso, porta) reactor.run()
quando uma conexão é feita, o ConnectionTestFactory é chamado, então, o connectionMade chama self.factory.deferred.callback("") enviando uma string qualquer, indicando que a conexão foi completada.
na função conteste temos host e port , criamos uma Fabrica e passamos isso para o reactor.connectTCP que faz o teste de conexão e então retorna um atributo Fabrica.deferred que é um objeto Deferred que retorna se a tentativa de conexão foi bem sucedida.
se a conexão é bem sucedida é chamada a função sucesso, mas o que acontece se a conexão falhar?
o reactor não vai dar resposta alguma , para que seja possivel receber uma resposta caso a conexão falhe precisamos adicionar um addEErback "conn.addErrback(função, porta)"
assim como em add.Callback é necessario uma função que imprima na tela uma string que informe que a conexão falhou ao tentar se conectar a porta.
Nenhum comentário:
Postar um comentário