这是到目前为止我想出的一些代码...
from twisted.internet import protocol,reactor
from twisted.internet.protocol import Protocol,ClientFactory
class serverprotocol(Protocol):
def dataReceived(self,data):
print "[+] got \n" + data
factory = protocol.ClientFactory()
factory.protocol = Clientp
global xx
xx=data
print xx
reactor.connectTCP("127.0.0.1",80,factory)
class Clientp(Protocol):
def connectionMade(self):
print "sending " + xx
self.transport.write(xx)
def dataReceived(self,data):
print "+ got reply" + data
factory = protocol.ServerFactory()
factory.protocol = serverprotocol
reactor.listenTCP(3333, factory)
reactor.run()
我想知道如何将在客户端类中收到的数据发送回客户端
在端口3333上连接。
如果有更好的编码方法,请告诉我。
最佳答案
这是一个扭曲的常见问题解答:"How do I make input on one connection result in output on another"?
但这并不是一个扭曲的问题。它更多是一个基本的Python编程问题。
您要问的是,给定类Clientp
,如何将参数传递给它,以便它知道以后要做什么?
答案很简单,就是“给它__init__
并传递一个参数”
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.internet import reactor
class serverprotocol(Protocol):
def dataReceived(self,data):
print "[+] got \n" + data
def clientProtocol():
return Clientp(data)
endpoint = TCP4ClientEndpoint(reactor, "127.0.0.1", 80)
endpoint.connect(Factory.forProtocol(clientProtocol))
class Clientp(Protocol):
def __init__(self, dataToSend):
self.dataToSend = dataToSend
def connectionMade(self):
self.transport.write(self.dataToSend)
def dataReceived(self,data):
print "+ got reply" + data
reactor.listenTCP(3333,
Factory.forProtocol(serverprotocol))
reactor.run()
如果您想要的是完整的端口转发器,则可以使用
twistd portforward
或查看twisted.protocols.portforward
中的代码。