当前位置: 代码迷 >> python >> 扭曲协议,可同时处理TCP和UDP
  详细解决方案

扭曲协议,可同时处理TCP和UDP

热度:42   发布时间:2023-06-13 14:03:41.0

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

TCP是面向连接的,这意味着您将收到有关连接开始,何时到达数据以及何时结束的通知。 UDP不是; 您只是从各个同伴那里获取了大块数据,这些数据可能随时出现或消失而没有任何通知。 因此,您不能在TCP和UDP上使用相同的协议。 您需要UDP版本和TCP版本。

  相关解决方案