我想使用Twisted python实现Telnet服务器。根据扭曲的文件的说法,我在下面编写了代码,它工作正常。但我有两个问题。
首先,我无法理解lambda语法在这段代码中的确切含义,以及使用lambda这三个类之间是如何相互关联的。
其次,我需要使用self.transport.getPeer()来获取客户端ip地址。但是,在transport类中没有类似于HistoricRecvLine属性的东西。(self.transport是ServerProtocol属性之一。)我确实需要使用recvline来管理终端,也需要使用transport属性。但我不知道怎么把它们都用上。你有什么建议吗?
from twisted.application import internet
from twisted.conch import recvline
from twisted.conch.insults import insults
from twisted.conch.telnet import TelnetTransport, TelnetBootstrapProtocol
from twisted.internet import protocol
class DemoRecvLine(recvline.HistoricRecvLine):
def lineReceived(self, line):
print(line)
if line.decode() == "quit":
self.terminal.loseConnection()
self.terminal.write(line)
self.terminal.nextLine()
self.terminal.write(self.ps[self.pn])
#print(self.transport.getPeer().host)
f = protocol.ServerFactory()
f.protocol = lambda: TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
PORT = 6023
from twisted.internet import reactor
reactor.listenTCP(PORT, f)
reactor.run()发布于 2019-09-02 08:44:01
我无法理解lambda语法在这段代码中的确切含义。
它定义了一个没有名字的函数。就像你写的
def noname():
return TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
f.protocol = noname即创建带有某些参数的TelnetTransport对象的函数。
这三个类是如何使用lambda相互关联的?
TelnetTransport对象将为每个类创建一定数量的实例,大概不止一个。
https://stackoverflow.com/questions/57753655
复制相似问题