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