我想使用 Twisted python 实现 Telnet 服务器。根据Twisted 文档,我在下面编写了代码并且它可以正常工作。但我有两个问题。
首先,我无法理解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()
我无法理解这段代码中 lambda 语法的确切含义
它定义了一个没有名字的函数。就像你写的
def noname():
return TelnetTransport(TelnetBootstrapProtocol,insults.ServerProtocol, DemoRecvLine)
f.protocol = noname
即创建TelnetTransport
具有一些参数的对象的函数。
这三个类如何使用 lambda 相互关联
该TelnetTransport
对象将为这些类中的每一个创建一定数量的实例,大概不止一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句