同时处理TCP和UDP的双工协议

时间:2015-10-19 21:22:04

标签: python python-2.7 tcp udp twisted

我想要做的事情,考虑我的逻辑,与我选择的传输无关 - 我希望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中分离出相同的逻辑并将其传递给一系列函数,而不管它们是如何被调用的。

1 个答案:

答案 0 :(得分:3)

TCP是面向连接的,这意味着您会收到连接开始,数据到达时以及结束时的通知。 UDP不是;您只需从各个对等方获取大量数据,这些数据可能随时出现或消失而无需通知。因此,您不能通过TCP和UDP说出相同的协议;你需要一个UDP版本和一个TCP版本。