クライアント:
#!/usr/bin/env python
from twisted.internet import reactor, protocol
class EchoClient(protocol.Protocol):
def __init__(self, arg):
self.arg = arg
def connectionMade(self):
self.transport.write("hello, world!")
def dataReceived(self, data):
print "Server said:", data
self.transport.loseConnection()
def connectionLost(self, reason):
print "connection lost"
class EchoFactory(protocol.ClientFactory):
protocol = EchoClient
def buildProtocol(self, address):
proto = protocol.ClientFactory.buildProtocol(self, address, 12)
self.connectedProtocol = proto
return proto
def clientConnectionFailed(self, connector, reason):
print "Connection failed - goodbye!"
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost - goodbye!"
reactor.stop()
def main():
f = EchoFactory()
reactor.connectTCP("localhost", 8000, f)
reactor.run()
if __name__ == '__main__':
main()
サーバ:
#!/usr/bin/env python
from twisted.internet import reactor, protocol
from twisted.application import service, internet
class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
def main():
factory = protocol.ServerFactory()
factory.protocol = Echo
reactor.listenTCP(8000,factory)
reactor.run()
if __name__ == '__main__':
main()
エラー:
exceptions.TypeError: buildProtocol() takes exactly 2 arguments (3 given)
質問:
EchoClient
でクラスを取得して、パラメーターを受け入れ、インスタンス変数 (上記のコンストラクターのCLIENT
arg など) を割り当てるにはどうすればよいですか? EchoClient
以下に示すように、関数をオーバーライドすることが以前に提案されていbuildProtocol
ましたが、そうしようとした結果、上記のエラーが発生しました。ここからどこへ行けばいいのかよくわかりません。私の質問は次のように一般化できると思います:インスタンス変数をプロトコルに追加するにはどうすればよいですか?