0

我有一个很可能属于 Twisted 或可能与 Python 直接相关的问题。

我的问题,另一个与 Twisted 中的断开连接过程有关。正如我在本网站上所读到的,如果我愿意,我必须执行以下步骤:

  1. 服务器必须停止监听。
  2. 客户端连接必须断开。
  3. 服务器连接必须断开。

根据我在上一页上阅读的内容,第一步必须运行该stopListening方法。

在网络中提到的示例中,所有操作都在同一个脚本中执行。使访问不同的变量和方法变得容易。

对我来说,我有一个服务器,一个客户端位于不同的文件和不同的位置。

我有一个创建服务器并分配协议的函数,并希望从另一个文件中的客户端协议对停止连接器的方法进行 AMP 调用。

call AMP 调用 SendMsg 命令。

class TESTServer(protocol.Protocol):

    factory = None
    sUsername = ""
    credProto = None
    bGSuser = None
    slot = None
"""
Here was uninteresting code.
"""
            #   upwards=self.bGSuser, forwarded=True, tx_timestamp=iTimestamp,\
            #    message=sMsg)

        log.msg("self.connector")
        log.msg(self.connector)

        return {'bResult': True}
    SendMsg.responder(vSendMsg)

    def _testfunction(self):
        logger = logging.getLogger('server')

        log.startLogging(sys.stdout)

        pf = CredAMPServerFactory()

        sslContext = ssl.DefaultOpenSSLContextFactory('key/server.pem',\
     'key/public.pem',)

        self.connector = reactor.listenSSL(1234, pf, contextFactory = sslContext,)

        log.msg('Server running...')
        reactor.run()

if __name__ == '__main__':
    TESTServer()._testfunction()

CredAMPServerFactory 类分配相应的协议。

class CredAMPServerFactory(ServerFactory):

    """
    Server factory useful for creating L{CredReceiver} and L{SATNETServer} instances.

    This factory takes care of associating a L{Portal} with the L{CredReceiver}
    instances it creates. If the login is succesfully achieved, a L{SATNETServer}
    instance is also created.
    """
    protocol = CredReceiver

在“CredReceiver”类中,我有一个将协议分配给 TestServer 类的调用。我这样做是为了使用 AMP 方法“响应程序”进行调用。

        self.protocol = SATNETServer

我的问题是,当我进行调用时,程序会响应错误,指示连接器不属于 CredReceiver 属性对象。

  File "/home/sgongar/Dev/protocol/server_amp.py", line 248, in vSendMsg
    log.msg(self.connector)
exceptions.AttributeError: 'CredReceiver' object has no attribute 'connector'

我怎么能这样做?有谁知道类似的例子可能会注意到?

谢谢你。

编辑。

服务器端:

server_amp.py

  1. 启动一个反应器:reactor.listenSSL(1234, pf, contextFactory = sslContext,)从 SATNETServer 类中。

  2. 也从 SATNETServer 类中将协议分配pfCredAMPServerFactory属于模块 server.py 的类。

服务器.py

  1. 在类内将类CredAMPServerFactory分配CredReceiver给协议。
  2. 一旦建立连接,就会将类SATNETServer分配给协议。

客户端:

客户端放大器

  1. 调用SendMsg属于SATNETServer该类的方法。
4

0 回答 0