【问题标题】:Is 127.0.0.1 different from the IP address?127.0.0.1 与 IP 地址不同吗?
【发布时间】:2013-12-27 05:13:05
【问题描述】:
  1. 我使用 127.0.0.1 和端口号创建了一个 c# 套接字。现在我创建了一个本地客户端(它在与服务器相同的机器上本地运行)并尝试使用机器的 fqdn 进行连接。它不起作用。如果我使用 127.0.0.1 而不是 fqdn 作为客户端,它可以工作。 反之亦然,如果我使用本地计算机的 fqdn 和端口号创建服务器,而客户端使用 127.0.0.1,则它不起作用。如果我在客户端使用 fqdn,那么一切正常。这让我想到机器自己的 IP 地址/fqdn 和 127.0.0.1 之间有什么区别,因为我的印象是它们都指向同一台机器。

  2. 如果是 C# UdpClient,我们只需指定端口号。那么c#是如何处理这个问题的呢?

  3. 如果一台机器有多个网卡并且我们只是指定端口号(例如在 UdpClient 的情况下),使用什么网卡来创建端口?

【问题讨论】:

  • 尝试将服务器绑定到0.0.0.0。那么 FQDN 和 127.0.0.1 应该都可以工作。

标签: c# networking ip localhost


【解决方案1】:
  1. 您的客户端解析可能指向另一个接口的 FQDN,而不是环回。它们确实引用了同一台机器,但是它们是不同的接口。
  2. According to MSDNUdpClient 将监听“默认接口”
  3. 同样,无论微软定义为“默认接口”。实际上,这意味着如果您侦听一个 IP 地址,您将只会获得针对该 IP 的流量。

【讨论】:

  • 感谢您的回答!
【解决方案2】:

IP 地址127.0.0.1 是每台计算机上存在的本地环回虚拟网络适配器的地址。此虚拟适配器完全位于操作系统内部,无法从其他地方连接。在同一台机器上运行的程序可以相互通信,但不能相互通信。

当您使用 FQDN 连接到计算机时,名称将解析为属于该名称的 IP 地址,通常是连接到外部网络适配器的地址。假设您计算机的网络地址是192.168.0.2。当您尝试连接到该地址的任何端口时,它将永远连接到侦听 127.0.0.1 的程序,就像它连接到侦听地址 192.168.0.3 的其他计算机一样。

地址很重要。

如果您希望您的程序接受连接到计算机的任何网络适配器上的连接,请将其绑定到每个地址:0.0.0.0

【讨论】:

  • 感谢您的回答!所以看起来 0.0.0.0 不包括 127.0.0.1?我写了一个小程序来验证。
  • 不,监听0.0.0.0 应该接受所有地址上的连接,包括127.0.0.1。你是如何测试这个让它失败的??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2020-12-29
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
相关资源
最近更新 更多