关于UDP服务器如何将响应发送回UDP客户端的困惑

pjj*_*pjj 7 udp tcp-ip

我正在编写一个基于UDP的客户端服务器并且已经获得了相当多的代码,但我对UDP服务器如何将响应发送回UDP客户端感到困惑,这是我的理解,直到现在:

  • 假设UDP客户端想要与UDP服务器通信,因此它将向UDP服务器发送请求(使用在客户端打开的UDP套接字),现在这将到达UDP服务器上的UDP模块,UDP模块将在其中识别使用端口号的UDP服务,并将该请求发送到该UDP服务/服务器.
  • 现在,由于UDP是一种无连接协议,因此与TCP不同,UDP服务器不会通过某些连接发送响应,而是UDP服务器将从请求中提取源IP地址和源端口,并将响应发送回客户端.

我的困惑是,在服务器端,有一个套接字绑定到UDP端口并"连续"监听任何UDP客户端请求,但在客户端不是这样,UDP客户端将打开一个套接字发送请求到UDP服务器,那就是它,我认为它不能保持该端口挂起UDP服务器响应,如果该端口关闭,那么客户端将如何接收响应.

我的意思是说,UDP服务器的响应将返回UDP客户端,因为IP地址在那里,但一旦该响应已到达客户端的UDP模块,即使有一个端口,但UDP模块如何将其发送给最初的客户端发送请求是因为它会关闭绑定到该端口的套接字?或者它不会?

我正在寻找能够清楚地描述UDP通信的答案(我不想将它与TCP进行对比或解释TCP,因为我已经对TCP有了一定的了解),尤其是响应将如何回到UDP客户端.

use*_*421 4

我的困惑是,在服务器端,有一个套接字绑定到UDP端口并“连续”侦听任何UDP客户端请求,但在客户端并非如此,UDP客户端将打开一个套接字将请求发送到UDP 服务器,就是这样,我认为它不能保持该端口挂起以供 UDP 服务器响应,如果该端口关闭,那么客户端将如何接收返回的响应。

我同意。这就是你的困惑。您认为为什么不能保持套接字打开并对其进行接收?它可以。

我的意思是,当然,UDP服务器的响应将到达UDP客户端,因为IP地址在那里,但是一旦该响应到达客户端的UDP模块,即使会有一个端口,但是UDP模块如何将其发送到最初的客户端发送请求是因为它会关闭绑定到该端口的套接字?

为什么?

或者不会?

不是。

客户端:

  • 创建一个套接字
  • 发送数据报
  • 打电话recvfrom()或朋友收到回复。

当然,如果客户端对响应不感兴趣,它可以关闭套接字,但这不是正常情况。

我正在寻找清楚描述UDP通信的答案(我不感兴趣将其与TCP进行对比或解释TCP,因为我已经对TCP有了一定的了解),特别是响应如何返回UDP客户端。

所以不要用标签来标记你的问题。

  • “所以不要用 tcp 标签来标记你的问题” - 说得好。我认为OP的误解是客户端在使用它发送给客户端后必须始终关闭套接字。如果您对回复不感兴趣,那就是真的。然而,正如 user207421 正确所说,客户端可以决定在同一个套接字上侦听来自服务器的响应,这也完全没问题。不要让“客户端”和“服务器”这两个词让您感到困惑。它更像是任何一方都可以做的“发送者”和“接收者”。 (4认同)