gpt4 book ai didi

明确绑定(bind)()套接字函数

转载 作者:行者123 更新时间:2023-12-05 00:00:14 25 4
gpt4 key购买 nike

当我在阅读如何在 C 中建立 TCP 客户端/服务器连接时,我对 bind() 函数有疑问。

我读到您需要此函数将您创建的套接字“绑定(bind)”到本地 IPEndPoint,因为客户端/服务器连接采用由 制作的套接字对。本地IP:本地端口,远程IP:远程端口 .因此我的问题是:

  • 当客户端不调用 bind() 而是在创建套接字后立即调用 connect() 时会发生什么以及内核会做什么(这是常见的事情;我也在客户端程序中这样做,但我没有明白为什么我不需要绑定(bind))?

    ... 最重要的是...
  • 为什么服务器程序调用 bind(),将 INADDR_ANY 指定为 LocalIP 地址?我读到这个常量对于指定一个通用 IP 地址很有用,即服务器接受来自 Internet 上任何地方的数据。但是...这是本地 IP 地址的规范,还是表明客户端可以到达服务器的位置?我变得很困惑...
  • 最佳答案

    1) 如果要创建服务器套接字,通常只需要调用 Bind。在某些情况下需要建立客户端套接字,但通常不需要客户端套接字。如果要等待某个端口上的传入连接,则必须绑定(bind)到它。如果您想连接到某个 IP 和端口,则无需绑定(bind)。服务器套接字的绑定(bind)对 TCP 端口进行独占访问。在您的应用程序关闭或套接字被您关闭之前,没有其他东西可以联机并绑定(bind)到该端口。

    2)您正在指定要绑定(bind)到本地计算机上的哪个 IP。一台计算机可以有多个 IP 地址。您的计算机可能具有有线和无线连接。每个在本地网络上都有自己的 IP。您可以专门绑定(bind)到其中一个 IP,而不是另一个。您甚至可以将一个应用程序绑定(bind)到一个 IP 上的端口 473(例如),而将一个完全不同的应用程序绑定(bind)到另一个 IP 上的端口 473。如果您指定 INADDR_ANY,您将绑定(bind)到机器拥有的所有有效 IP。因此,客户端用来获取您的 IP 无关紧要,它会起作用。

    关于明确绑定(bind)()套接字函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565279/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com