我在这个站点上稍微修改了一个 server-client Twisted 程序,它提供了一个可以充当服务器和客户端的程序(How to write a twisted server that is also a client?)。我能够将服务器客户端连接到一侧的外部客户端和另一侧的外部服务器。我想通过服务器-客户端程序将数据从外部客户端传输到外部服务器。我遇到的问题是将 ServerProtocol 类(在服务器-客户端程序中)中接收到的行放入 ClientProtocol 类(在服务器-客户端程序中)。我尝试了多种方法,包括尝试使用工厂引用,正如您从 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 参考。任何意见或建议将不胜感激。