为什么接收UDP消息时需要绑定?

时间:2014-05-02 13:35:01

标签: linux sockets udp multicastsocket

发送UDP消息时不需要Bind()。 原因:我们不需要显式绑定(),因为操作系统会自动将发件人与IP地址和PORT号绑定。

为什么要接收UDP消息需要bind()?   发件人可以获得IP地址&收到上一条消息的接收方的PORT号,并使用该消息发送UDP消息?

2 个答案:

答案 0 :(得分:0)

你的问题没有意义。如果您已经发送了消息,则不需要它,因为您已经绑定了。如果您尚未发送消息,则需要此消息,在这种情况下,您描述的技术可能无法应用。

答案 1 :(得分:0)

UDP是无连接的,但它仍然基于绑定端口。接收方必须呼叫sendto()connect()bind()以建立本地绑定端口,以便操作系统知道允许入站数据的端口,并建立发送方需要的端口发送数据到。如果接收者是发送数据包的第一方,则绑定可以是隐式的,但如果接收者不是第一方,则必须明确地进行绑定。

如果接收器没有绑定本地端口,则端口不会打开更糟,或者OS最多会随机选择。无论哪种方式,发件人都无法知道将数据发送到哪个端口,除非接收方通过外部方式告诉发送方。即使这样,为了让接收器发现一个随机分配的端口,它也必须查询套接字,但是不能查询未绑定的套接字。因此接收方必须以某种方式执行本地绑定。