Ich gehe durch ein Buch namens "Twisted Network Programming Essentials rev.2" und ich habe ein Problem mit Beispiel von Zitat Server. Ich habe den Code aus dem Buch kopiert, aber wenn ich Server starten und dann Client ich einen Fehler in clientseitigen Anschluss habe:Ein TCP-Quote Server und Client in Twisted Python Fehler
Traceback (most recent call last):
File "quoteclient.py", line 45, in <module>
reactor.connectTCP("triptrck.com", 8000, QuoteClientFactory())
TypeError: __init__() takes exactly 2 arguments (1 given)
Hier ist der Code für den quoteclient.py:
from twisted.internet import protocol, reactor
class QuoteProtocol(protocol.Protocol):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
self.sendQuote()
def sendQuote(self):
self.transport.write(self.factory.quote)
def dataReceived(self, data):
print "Received quote:", data
self.transport.loseConnection()
class QuoteClientFactory(protocol.ClientFactory):
def __init__(self, quote):
self.quote = quote
def buildProtocol(self, addr):
return QuoteProtocol(self)
def clientConnectionFailed(self, connector, reason):
print "connection failed:", reason.getErrorMessage()
maybeStopReactor()
def clientConnectionLost(self, connector, reason):
print "connection lost:", reason.getErrorMessage()
maybeStopReactor()
def maybeStopReactor():
global quote_counter
quote_counter -= 1
if not quote_counter:
reactor.stop()
quotes = [
"You snooze you lose",
"The early bird gets the worm",
"Carpe diem"
]
quote_counter = len(quotes)
for quote in quotes:
reactor.connectTCP("triptrck.com", 8000, QuoteClientFactory())
reactor.run()
ich verstehe, dass das Problem ist, ich bin nicht ein 'Fabrik' Parameter in der 'QuoteProtocol' Anruf innen 'buildProtocol vorbei 'Funktion von' QuoteClientFactory 'Klasse. Aber ich habe keine Ahnung, was ich da reingehen soll. Ich dachte auch, dass ‚QuoteClientFactory‘ Ruf im Boden auch einen zweiten Parameter benötigen würde ‚Zitat‘, so habe ich versucht, es zu setzen wie folgt aus:
for quote in quotes:
reactor.connectTCP("triptrck.com", 8000, QuoteClientFactory(quote))
reactor.run()
Das Ergebnis war unerwartet, für mich. Der Fehler in clientseitige Terminal verschwunden, stattdessen habe ich diese bekam:
connection lost: Connection was closed cleanly.
connection lost: Connection was closed cleanly.
connection lost: Connection was closed cleanly.
Könnte mir jemand erklären, was los ist? Warum brauchen wir, dass ‚ init‘ mit ‚Fabrik‘ und ‚Zitat‘ und was soll ich dort passieren?
PS: ich auch ein Problem in ersten Beispiel in dem Buch gehabt haben, das Echo Fabrik-Server, wo aus irgendeinem Grund die Daten nicht durchgehen würde, und ich habe ändern 'transport.write 'zu' sendLine 'mit' LineReceiver 'anstelle von' Protokoll.Protokoll '. Vielleicht muss es damit auch etwas anfangen?