我正在编写一个基于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客户端 .
1 回答
我同意 . 这是你的困惑 . 为什么你认为不能保持套接字打开并接收它?它可以 .
为什么?
不 .
客户端:
创建一个套接字
发送数据报
调用
recvfrom()
或朋友收到回复 .当然,如果客户端对响应不感兴趣,它可以关闭套接字,但这不是正常情况 .
因此,请勿使用tcp标记标记您的问题 .