【问题标题】:Why does bind required while receiving UDP message?为什么在接收 UDP 消息时需要绑定?
【发布时间】:2014-06-19 05:13:27
【问题描述】:

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

为什么需要 bind() 来接收 UDP 消息? 发送方可以从接收到的上一条消息中获取接收方的 IP 地址和端口号,然后使用它发送 UDP 消息吗?

【问题讨论】:

  • 在“previous”消息之前交换会发生什么?而在那之前呢?而在那之前呢? ....您必须从某个地方开始,并且必须有人有明确的地址才能连接到对方。

标签: linux sockets udp multicastsocket


【解决方案1】:

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

如果接收方没有绑定本地端口,则端口不会被打开,或者最好是由操作系统随机选择。无论哪种方式,发送者都不希望知道将数据发送到哪个端口,除非接收者通过外部方式告诉发送者。即使这样,为了让接收者发现一个随机分配的端口,它也必须查询套接字,但无法查询未绑定的套接字。所以接收者必须以一种或另一种方式执行本地绑定。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2019-06-18
      • 2012-09-17
      相关资源
      最近更新 更多