【发布时间】:2011-10-11 19:08:00
【问题描述】:
在互联网上有几个地方向您展示了如何获取 IP 地址。其中很多看起来像这个例子:
String strHostName = string.Empty;
// Getting Ip address of local machine...
// First get the host name of local machine.
strHostName = Dns.GetHostName();
Console.WriteLine("Local Machine's Host Name: " + strHostName);
// Then using host name, get the IP address list..
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
for (int i = 0; i < addr.Length; i++)
{
Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
}
Console.ReadLine();
在这个例子中,我得到了几个 IP 地址,但我只对路由器分配给运行程序的计算机感兴趣:如果某人希望访问共享文件夹,我会给他的 IP 地址例如我的电脑。
如果我没有连接到网络,而是通过没有路由器的调制解调器直接连接到互联网,那么我想得到一个错误。如何查看我的计算机是否使用 C# 连接到网络,如果是,则获取 LAN IP 地址。
【问题讨论】:
-
If I am not connected to a network and I am connected to the internet这个说法似乎自相矛盾。您是否想弄清楚您的计算机是连接到专用 LAN 还是 Internet? -
作为警告:一台计算机可以有多个 IP 接口,例如 LAN 和 WiFi。如果您将服务绑定到特定的硬件(例如 LAN),则需要 LAN 的 IP。以下大多数示例将返回找到的“第一个”或“最后一个”IP 地址。如果您有超过 2 个 IP 地址,您的程序可能会在 50% 的时间内运行,具体取决于操作系统返回 IP 地址的随机顺序。
-
@MarkLakata 我想到了同样的问题。我下面的答案中的功能将处理它。您可以指定您希望获得 IP 地址的网络接口类型。
-
只是 FTR,如果你在这里用谷歌搜索 Unity3D,它的 API 中是 Network.player.ipAddress
-
@MarkLakata 严格来说,“第一个”或“最后一个”IP是“正确的”IP,因为浏览器可以使用任何可用的 IP。一个好的修正应该是返回与机器相关的每个 IP。
标签: c# networking