5

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

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

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

谢谢你的洞察力。

4

1 回答 1

4

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

于 2013-02-15T22:17:36.863 回答