【问题标题】:Twisted protocol that simultaneously handles TCP and UDP at once同时处理 TCP 和 UDP 的 Twisted 协议
【发布时间】:2015-10-19 21:22:04
【问题描述】:

考虑到我的逻辑,我想做的事与我选择的传输方式无关——我希望 UDP 和 TCP 能够工作。通常,如果我在做 TCP 或 SSL——这有点小事。但是,使用 UDP(无工厂)和 TCP(使用工厂),就变得有点棘手了?

from twisted.internet.protocol import Factory, ServerFactory, Protocol, DatagramProtocol
from twisted.internet import reactor

class SpecialServerProtocol(DatagramProtocol, Protocol):
  def datagramReceived(self, datagram, address):
    print("Received udp")
    self.transport.write(datagram, address)

  def dataReceived(self, data):
    print("Received tcp")
    self.transport.write(data)

class SpecialServerFactory(ServerFactory):
  protocol = IPBusServerProtocol

def main():
  reactor.listenTCP(8000, SpecialServerFactory())
  reactor.listenUDP(8000, SpecialServerProtocol())

  reactor.run()

if __name__ == '__main__':
  main()

这是我设法获得的一些代码,它似乎按预期工作(我认为)。我不清楚这是否真的是一件好事,或者我是否应该从 TCP/UDP 中分离出相同的逻辑并将其传递给一系列独立于它们被调用方式的函数。

【问题讨论】:

    标签: python python-2.7 tcp udp twisted


    【解决方案1】:

    TCP 是面向连接的,这意味着您会收到有关连接开始、数据何时到达以及何时结束的通知。 UDP 不是;您只是从各个对等点获得大量数据,这些数据可能随时出现或消失,而不会发出通知。因此,您不能在 TCP 和 UDP 上使用 same 协议;您需要一个 UDP 版本和一个 TCP 版本。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2017-01-05
      • 2013-10-05
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 2016-06-10
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多