我需要的是一種中間人的實現:我需要一個服務器從客戶端(不同長度的二進制數據)接收連接並將流轉發到它連接的服務器(充當客戶端),然後將數據從連接的服務器發送回客戶端。
它實際上在客戶端和服務器之間起作用,並且傳遞它們交換的數據(這是一個流,因此它不斷地從一邊傳送到另一邊)。
服務器是靜態的,所以它總是一樣的,它的地址甚至可以被硬編碼;但是,當客戶端斷開連接時,該服務器還必須斷開與「真實」服務器的連接。
我一直在環顧四周,但無法找到一個解決方案或例如這樣一個簡單的問題。
我所做的代碼實際上工作正常,但我還沒有成功找到如何在服務器部分中添加引用「這是您分配的客戶端」的引用,或者引入到「這是您的服務器」。這裏是我的代碼:
蟒蛇扭曲的中間人執行
#!/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()
現在,一點就是實例不能被包含到全局對象,並且應該把這兩個類中:怎麼了?
是的,我已經想通了,這樣的事情可能是處理它的方式,但我寧願不與構造玩,並添加到客戶工廠的引用。這種方式很容易工作。 然後,關於從客戶端到服務器的引用,我已經添加了一個對象到客戶端,在客戶端添加自己的對象之前是「None」。但是,我的代碼在我的答案。現在我只需要在兩種實現之間進行選擇,你或我的! :) 謝謝你的幫助! – 2013-03-26 18:46:04