发送 UDP 消息时不需要 Bind()。原因:我们不需要显式地绑定(),因为操作系统会自动将发件人与 IP 地址和端口号绑定。
为什么需要 bind() 来接收 UDP 消息?发送方可以从接收到的上一条消息中获取接收方的 IP 地址和端口号,并使用该消息发送 UDP 消息,对吗?
发送 UDP 消息时不需要 Bind()。原因:我们不需要显式地绑定(),因为操作系统会自动将发件人与 IP 地址和端口号绑定。
为什么需要 bind() 来接收 UDP 消息?发送方可以从接收到的上一条消息中获取接收方的 IP 地址和端口号,并使用该消息发送 UDP 消息,对吗?
你的问题没有意义。如果您已经发送消息,则不需要,因为您已经绑定。如果您尚未发送消息,则需要它,在这种情况下,您描述的技术可能无法应用。
UDP 是无连接的,但它仍然基于绑定端口。接收方必须调用sendto()
、connect()
或bind()
来建立本地绑定端口,以便操作系统知道哪个端口允许入站数据,并确定发送方需要将数据发送到的端口。如果接收方是发送数据包的第一方,则绑定可以是隐式的,但如果接收方不是第一方,则必须显式进行绑定。
如果接收方没有绑定本地端口,则端口不会被打开,或者最好是由操作系统随机选择。无论哪种方式,发送者都不希望知道将数据发送到哪个端口,除非接收者通过外部方式告诉发送者。即使这样,为了让接收方发现一个随机分配的端口,它也必须查询套接字,但无法查询未绑定的套接字。所以接收者必须以一种或另一种方式执行本地绑定。