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