Tcp 为什么没有;接受();对于UDP?

Tcp 为什么没有;接受();对于UDP?,tcp,udp,Tcp,Udp,我是从实际意义上问这个问题的。在TCP中,accept()将为每个connect()提供新的套接字。它只允许与一个服务器端口进行多个并发通信 问题是为什么我们在UDP中没有这样的便利?不要告诉我UDP是无连接的,因此。。。从逻辑上讲,accept()与此无关(底层IP无论如何都是无连接的) 一个后果是您必须应用大量UDP端口,这可能会使防火墙设置复杂化。那么我的下一个问题,关于端口和多路复用,多客户端UDP应用程序的解决方案是什么?在某些情况下,我正在考虑将客户机信息嵌入UDP数据包中,并让服务

我是从实际意义上问这个问题的。在TCP中,accept()将为每个connect()提供新的套接字。它只允许与一个服务器端口进行多个并发通信

问题是为什么我们在UDP中没有这样的便利?不要告诉我UDP是无连接的,因此。。。从逻辑上讲,accept()与此无关(底层IP无论如何都是无连接的)

一个后果是您必须应用大量UDP端口,这可能会使防火墙设置复杂化。那么我的下一个问题,关于端口和多路复用,多客户端UDP应用程序的解决方案是什么?在某些情况下,我正在考虑将客户机信息嵌入UDP数据包中,并让服务器区分开来。但本质上没有accept(),某些任务很难完成(例如,使用OpenSSL的UDP)


谢谢你的洞察力

因为UDP是一种无连接协议,所以您不需要它。您可以通过每个传入的UDP数据报获得远程地址信息,这样您就知道它来自谁,所以不需要每个连接套接字来告诉您。您根本不必“应用大量UDP端口”。您只需要一个。

而且因为每个UDP数据报都是独立的,所以它不是数据流的一部分。因此,除了从套接字读取它之外,没有任何特定于套接字的工作需要执行。+1表示“通过每个传入的UDP dgram获取远程地址信息”。我需要它。
accept()
与TCP具有连接这一事实有关。
accept()
的要点是获取一个只包含该连接数据的流,该流按顺序进行,没有丢失或重复。所述的关闭原因无效。关于这件事没有争论或辩论。录像机