【问题标题】:Winsock bind address "INADDR_ANY" clarificationWinsock 绑定地址“INADDR_ANY”的说明
【发布时间】:2014-03-05 14:44:42
【问题描述】:

当我使用 INADDR_ANY 指定要绑定到套接字的 IP 地址时,它稍后会侦听端口,如下所示:

sockaddr_in sockAddr;

sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(80);
sockAddr.sin_addr.S_un.S_addr = INADDR_ANY; // use default

此套接字结构是否允许外部、内部和环回 IP 地址连接到我?

我不想通过将我的计算机外部地址(即:122.215.214.3)代替 INADDR_ANY 来限制可以与我通信的 IP 地址,因为这样内部 IP 无法连接。

我想知道 INADDR_ANY 是否会与我计算机的所有 3 个 IP 地址(外部、内部、环回)绑定。

【问题讨论】:

    标签: sockets networking winsock


    【解决方案1】:

    绑定侦听套接字时,INADDR_ANY 允许在直接属于正在运行侦听套接字的计算机的任何 本地 IPv4 地址上进行入站连接,其中包括环回地址。但是,您不能绑定到机器外部的外部 IP 地址,例如网络路由器的公共 IP。必须将路由器配置为将来自公共 IP 的传入连接转发到分配给它可以绑定的侦听机器的私有 LAN IP。

    【讨论】:

    • 假设我的家庭路由器端口将端口 205 转发到我的 NAT 内的计算机,该计算机在端口 205 上运行服务器,现在 INADDR_ANY 是否适用于外部、内部 (LAN) 和环回 IP 地址?
    • 是的,但是服务器仍然不知道外部IP,也不需要知道。外部连接将首先到达路由器,然后转发到服务器的内部 IP,就像连接来自同一 LAN 上的另一台计算机一样。您的服务器不会知道其中的区别。只要绑定到路由器转发到的内部IP,外部客户端就可以连接到你的服务器。
    猜你喜欢
    • 2017-10-17
    • 2011-11-28
    • 1970-01-01
    • 2018-06-16
    • 2016-09-19
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多