在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”不执行任何握手连接。) 希望这可以帮助。