如何解决在UDP套接字上使用sendto / recvfrom而不是connect / send / recv的目的是什么?
| 我可以理解TCP和UDP的概念,但是我仍然不知道为什么有两种发送UDP数据包的方式,而且我仍然不明白bind()和accept()是否绝对必要...解决方法
accept()
表示TCP。它与UDP无关。
UDP中的“ 1”对另一端没有任何作用,它仅使本地API知道您要向谁发送和接收来自谁。
如果您不知道该消息,或者不在乎,或者想使用同一套接字发送到多个目标,则不要使用connect()
,而应使用sendto()
。同样用于接收。
例如,以UDP服务器为例。它会调用recvfrom(),
,这样它将获取源地址信息,处理请求,创建响应并将其通过ѭ5send发送到该地址。没有connect()
涉及任何地方,因此无法使用send()
或recv().
只需要“ 9”台服务器,因为客户端需要一个固定的端口号来发送。客户端根本不需要bind()
:将使用系统分配的本地端口号在第一个send()/sendto()/recv()/recvfrom()
上进行自动bind()。
, 重要的是要了解TCP是面向连接的,而UDP是无连接的协议。
TCP:您需要先连接,然后再向/从远程主机发送/接收数据。
UDP:不需要连接。您可以向/从任何主机发送/接收数据。
通常,您将在UDP套接字上使用ѭ3来指定目的地。同样,您通常会使用ѭ13来知道从何处接收UDP数据。
但是,实际上您可以在UDP套接字上使用“ 1”作为选项。在这种情况下,可以在UDP套接字上使用“ 15”将数据发送到用“ 1”指定的地址,并且仅从该地址接收数据。 (UDP套接字上的“ 1”仅设置了默认的对等地址,您可以根据需要多次调用UDP套接字上的“ 1”,当然,UDP套接字上的“ 1”不执行任何握手连接。)
希望这可以帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。