このサイトのサーバークライアントツイストプログラムを少し変更しました。これは、サーバーおよびクライアントとして機能できるプログラムを提供します(クライアントでもあるツイストサーバーの作成方法は?)。サーバークライアントを一方の外部クライアントに接続し、もう一方の外部サーバーに接続することができます。サーバークライアントプログラムを介して外部クライアントから外部サーバーにデータを転送したい。私が抱えている問題は、ServerProtocolクラス(server-clientプログラム内)で受信した行をClientProtocolクラス(server-clientプログラム内)に取り込むことです。def initからわかるように、ファクトリリファレンスを使用するなど、これを行うためのいくつかの方法を試しました。しかし、私はそれを機能させることができません。(現時点では、リテラルを外部サーバーとクライアントに送受信しているだけです)サーバークライアントコードは次のとおりです。
from twisted.internet import protocol, reactor
from twisted.protocols import basic
class ServerProtocol(basic.LineReceiver):
def lineReceived(self, line):
print "line recveived on server-client",line
self.sendLine("Back at you from server-client")
factory = protocol.ClientFactory()
factory.protocol = ClientProtocol
reactor.connectTCP('localhost', 1234, factory)
class ClientProtocol(basic.LineReceiver):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
self.sendLine("Hello from server-client!")
#self.transport.loseConnection()
def lineReceived(self, line):
print "line recveived on server-client1.py",line
#self.transport.loseConnection()
def main():
import sys
from twisted.python import log
log.startLogging(sys.stdout)
factory = protocol.ServerFactory()
factory.protocol = ServerProtocol
reactor.listenTCP(4321, factory)
reactor.run()
if __name__ == '__main__':
main()
ポート4321と1234でそれぞれ外部サーバーと外部クライアントを使用してサーバークライアントプログラムに接続でき、エコーバックするだけです。また、self.factoryリファレンスを使用するための多くの試みを示していません。アドバイスや提案をいただければ幸いです。