为什么UDP没有“accept()”?

use*_*574 5 udp tcp

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

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

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

谢谢你的洞察力。

use*_*421 6

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