python监听多个udp端口_python – 如何使用twisted来监听多个udp端口?

我用

Python写了一个服务器,通过UDP进行通信的Twisted库.这一切都运作良好.

我想要做的是扩展该服务器,以便它可以同时接受多个UDP端口上的消息(我使用不同的端口来隔离返回的信息,而不是关于请求的来源).我试图做最简单的事情作为测试 – 我写的代码看起来像这样:

reactor.listenUDP(port, handler)

reactor.listenUDP(port+1, handler)

(第一行是我服务器中的第一行;第二行是要侦听的第二个端口.)

当我运行时,我得到以下内容:

File "./rspServer.py", line 838, in mainLoop

reactor.listenUDP(self.args.port+1, udpHandler)

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/posixbase.py", line 347, in listenUDP

p.startListening()

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/udp.py", line 86, in startListening

self._connectToProtocol()

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/udp.py", line 106, in _connectToProtocol

self.protocol.makeConnection(self)

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/protocol.py", line 665, in makeConnection

assert self.transport == None

AssertionError

我从中可以看出,我无法添加第二个UDP侦听器,但这正是我想做的事情(实际上,总共有18个听众 – 这是一个很长的故事).有关如何做到这一点的任何想法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,为了实现局域网内没有外网的电脑连接上外网,我们可以使用 Python 实现一个简单的端口转发服务。下面是实现步骤: 1. 在拥有外网的电脑上安装 Python,打开命令行并输入以下命令安装 Twisted 模块 ``` pip install twisted ``` 2. 在拥有外网的电脑上创建一个名为 forward.py 的 Python 文件,并将以下代码复制到文件中: ```python from twisted.internet import reactor, protocol class ForwardServer(protocol.Protocol): def __init__(self): self.client = None def connectionMade(self): factory = protocol.ClientFactory() factory.protocol = ForwardClient factory.server = self reactor.connectTCP("目标主机地址", 目标端口, factory) def dataReceived(self, data): if self.client: self.client.write(data) def connectionLost(self, reason): if self.client: self.client.loseConnection() class ForwardClient(protocol.Protocol): def connectionMade(self): self.factory.server.client = self def dataReceived(self, data): self.factory.server.write(data) def connectionLost(self, reason): self.factory.server.loseConnection() factory = protocol.ServerFactory() factory.protocol = ForwardServer reactor.listenTCP(本地端口, factory) reactor.run() ``` 将 "目标主机地址" 替换为拥有外网的电脑的 IP 地址,将 "目标端口" 替换为您要转发的端口,例如 80(HTTP 端口)或 443(HTTPS 端口)。将 "本地端口" 替换为本地电脑上要监听端口,例如 8080。 3. 保存 forward.py 文件并在拥有外网的电脑上运行它。可以使用以下命令: ``` python forward.py ``` 4. 在没有外网的电脑上打开浏览器并输入 "拥有外网的电脑的IP地址:本地端口",例如 "192.168.1.100:8080",然后按回车键。如果一切正常,您应该能够访问 Internet 上的网站。 这就是实现局域网内没有外网的电脑连接上外网的端口转发服务的简单步骤。注意,这个示例只转发 TCP 流量,如果您需要转发 UDP 流量,则需要做一些修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值