首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在buildProtocol期间检索侦听端口

在buildProtocol期间检索侦听端口
EN

Stack Overflow用户
提问于 2010-11-23 07:51:09
回答 1查看 561关注 0票数 1

我正在修改ServerFactory的buildProtocol方法,基本上工厂监听端口11000和12000,我有两个协议,每个端口一个。我正在尝试检索客户端用于侦听的端口,以便我可以实例化正确的协议。

例如。客户端在端口11000监听,协议1被实例化。客户端在端口12000监听,协议2被实例化。

我认为这只能在buildProtocol阶段完成,有没有办法确定哪个端口是用来连接的?buildProtocol使用的地址参数是客户端地址,我需要服务器端口。

伪代码:

代码语言:javascript
运行
复制
def buildProtocol(self, address):
  if address connects at port 11000:
    proto = TransformProtocol()
  else:
    proto = TransformProtocol2()
  proto.factory = self
  return proto
EN

回答 1

Stack Overflow用户

发布于 2010-11-24 23:25:41

我认为,您可能需要使用扭曲服务:link text

你的代码应该是这样的:

代码语言:javascript
运行
复制
from twisted.application import internet, service
from twisted.internet import protocol, reactor
from twisted.protocols import basic

class UpperCaseProtocol(basic.LineReceiver):
    def lineReceived(self, line):
        self.transport.write(line.upper() + '\r\n')
        self.transport.loseConnection()

class LowerCaseProtocol(basic.LineReceiver):
    def lineReceived(self, line):
        self.transport.write(line.lower() + '\r\n')
        self.transport.loseConnection()

class LineCaseService(service.Service):

    def getFactory(self, p):
        f = protocol.ServerFactory()
        f.protocol = p
        return f

application = service.Application('LineCase')
f = LineCaseService()

serviceCollection = service.IServiceCollection(application)
internet.TCPServer(11000,f.getFactory(UpperCaseProtocol)).setServiceParent(serviceCollection)
internet.TCPServer(12000,f.getFactory(LowerCaseProtocol)).setServiceParent(serviceCollection)

但是,这里我们有两个工厂实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4251433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档