【问题标题】:In which cases is calling bind() necessary? [duplicate]在哪些情况下调用 bind() 是必要的? [复制]
【发布时间】:2012-12-15 23:04:22
【问题描述】:

可能重复:
What client-side situations need bind()?

我看到服务器程序绑定到一个端口。为什么这对于客户端程序不是必需的? 毕竟客户端程序也会发送和接收数据。

无论如何,在哪些情况下调用 bind() 是必要的?还有W-H-Y

【问题讨论】:

    标签: sockets networking network-programming


    【解决方案1】:

    为什么客户端程序不需要这样做?

    因为它会在您连接套接字时自动发生。通常您并不关心您在客户端软件中使用的是哪个本地出站端口,实际上您唯一关心的是您的网络管理员错误地实施了出站端口编号规则,这只会​​导致问题并且不能解决任何问题。

    【讨论】:

      【解决方案2】:
      1. 无论 服务器 套接字的套接字系列如何,您都需要执行绑定。

      2. 对于客户端套接字,这取决于。对于 AF_INET 类型的套接字,底层堆栈 (TCP) 为客户端套接字执行绑定。但是对于 AF_UNIX 类型的套接字客户端需要执行与代码的绑定。因此对于客户端套接字,它取决于套接字系列类型。

      【讨论】:

      • 其实你不必做(1)。如果你只是调用listen(),会有一个自动的bind(),端口号为零,它给你一个系统分配的端口。
      【解决方案3】:

      对于 TCP 服务器套接字,您必须指定 IP端口号:这使客户端能够知道主机的地址(通过 IP)和进程服务器(通过端口号),

      在服务器套接字接受来自客户端的新连接后,它会为该客户端创建一个新的专用套接字,并且服务器通过这些新套接字区分客户端,因此您可以创建一个客户端/没有将客户端套接字绑定到端口号的服务器应用程序

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 2020-06-05
        • 2016-01-27
        • 2010-10-31
        相关资源
        最近更新 更多