我需要的是一种中间人实现:我需要一个服务器,它接收来自客户端的连接(具有不同长度的二进制数据)并将流转发到它连接到的服务器(充当客户端),并且然后将数据从它所连接的服务器发送回客户端。
它实际上位于客户端和服务器之间,并传递它们交换的数据(这是一个流,因此它不断地从一侧获取并发送到另一侧)。
服务器是静态的,所以它总是一样的,它的地址甚至可以硬编码;但是,当客户端断开连接时,该服务器也必须断开与“真实”服务器的连接。
我一直在环顾四周,但找不到这样一个简单问题的解决方案或示例。
我编写的代码实际上可以工作,但我还没有设法找到如何将引用放入“这是您分配的客户端”的服务器部分,或放入“这是您的服务器”的客户端。这是我的代码:
#!/usr/bin/env python
from twisted.internet import protocol, reactor
from twisted.protocols import basic
client = None
server = None
class ServerProtocol(protocol.Protocol):
def connectionMade(self):
global server
factory = protocol.ClientFactory()
factory.protocol = ClientProtocol
server = self
reactor.connectTCP('localhost', 1324, factory)
def dataReceived(self, data):
global client
client.transport.write(data)
class ClientProtocol(protocol.Protocol):
def connectionMade(self):
global client
# Here's the instance of the client
client = self
def dataReceived(self, data):
global server
server.transport.write(data)
def main():
import sys
from twisted.python import log
log.startLogging(sys.stdout)
factory = protocol.ServerFactory()
factory.protocol = ServerProtocol
# Here's the instance of the server
server = ServerProtocol
reactor.listenTCP(2593, factory)
reactor.run()
if __name__ == '__main__':
main()
现在,关键是实例不能包含在全局对象中,而应该放在两个类中:如何?