【问题标题】:When to use bind() when programming with sockets?使用套接字编程时何时使用 bind()?
【发布时间】:2012-04-21 13:53:30
【问题描述】:

我正在编写一个简单的发送方和接收方程序以使用 UDP 进行传输,因此它是无连接的,但我无法确定我的接收方程序是否需要调用 bind() 或服务器和/或两者。我的接收程序(客户端)将处于无限循环中,等待从发送方(服务器)接收数据,然后打印出数据。除了将地址/端口与特定套接字相关联之外,我不太确定 bind() 究竟做了什么。为什么我需要调用 bind()?

【问题讨论】:

    标签: c sockets unix network-programming


    【解决方案1】:

    您需要调用bind(2) 以便操作系统知道将网络数据包路由到哪个应用程序。当您使用给定协议(例如 TCP 或 UDP)的特定端口调用 bind 时,您会问它“每当您在端口 XXXXX 上看到网络数据包时,请给我”。

    例如,假设您的程序的两个副本正在运行,它们都想在同一个端口上侦听 UDP 数据包。如果他们都在同一个端口上调用bind,那么一个会成功,一个会失败,因为操作系统可以仲裁谁绑定到每个端口。然后,在该端口上接收到的任何数据包都将被提供给成功绑定到该端口的程序实例。

    【讨论】:

    • 所以我的接收程序需要调用 bind() 而我的发送者不需要?
    【解决方案2】:

    当您想使套接字成为固定地址或/和端口时,您可以使用绑定。

    【讨论】:

      【解决方案3】:

      在开发网络应用程序时,您需要指定要绑定的“地址和端口”,因为如果您想为 Localhost 设置它,您的应用程序无法与整个网络通信,它仅适用于您的系统通信.. 如果你用你的网络地址设置它不能作为 localhost 通信它只能与网络通信,如果你将它设置为 0,那么它可以用作 localhost 和网络。

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 2013-01-03
        • 2012-08-30
        • 2015-09-08
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 2015-02-06
        相关资源
        最近更新 更多