首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不清楚UDP服务器如何将响应发送回UDP客户端。

不清楚UDP服务器如何将响应发送回UDP客户端。
EN

Stack Overflow用户
提问于 2016-12-18 21:15:25
回答 3查看 12.9K关注 0票数 21

我正在编写一个基于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客户端。

EN

回答 3

Stack Overflow用户

发布于 2016-12-18 21:54:34

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

我同意。这就是你的困惑。你认为为什么不能打开插座并在上面做个接收?它可以。

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

为什么?

还是不会呢?

不。

客户:

  • 创建一个套接字
  • 发送一份数据报
  • 打电话给recvfrom()或朋友以接收响应。

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

我正在寻找明确描述UDP通信的答案(我不想将它与TCP进行对比或解释TCP,因为我已经对TCP有了公平的理解),特别是响应将如何到达UDP客户端。

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

票数 4
EN

Stack Overflow用户

发布于 2020-09-10 09:55:04

是的,UDP服务器可以发送回客户端。下面是一个示例:https://www.cs.rutgers.edu/~pxk/417/notes/sockets/udp.html和代码演示https://www.cs.rutgers.edu/~pxk/417/notes/sockets/demo-udp-04.html

现在有一个客户端向服务器发送消息。如果服务器想要向那个客户端发送一条消息呢?没有连接,所以服务器不能只写回响应。幸运的是,recvfrom呼叫给了我们服务器的地址。它放在remaddr中: recvlen = recvfrom(s,buf,BUFSIZE,0,(struct sockaddr *)和&addrlen);服务器可以在sendto中使用该地址并将消息发送回收件人的地址。sendto(s,buf,strlen(buf),0,(struct sockaddr *)&remaddr,addrlen)

票数 3
EN

Stack Overflow用户

发布于 2019-03-07 18:22:29

客户端使用一些随机但唯一的源端口。服务器将响应发送回此唯一端口。服务器一次将不会从单个端口接收2个请求。服务器使用这个事实将响应映射到请求。只有在收到响应后,客户端才关闭此源端口/套接字。客户端可以在任何给定的时间点发送与可供其处理的端口数相同的请求。因为一旦收到响应,端口就会关闭,因此再次可用。

参考资料:https://www.slashroot.in/how-does-udp-work

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41212967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档