在 C++ 中,获取本地计算机的 IP 地址和子网掩码最简单的方法是什么?
我希望能够在我的本地网络中检测本地机器的 IP 地址。在我的特殊情况下,我有一个子网掩码为 255.255.255.0 的网络,我的计算机的 IP 地址是 192.168.0.5。我需要以编程方式获取这些有两个值,以便向我的网络发送广播消息(对于我的特殊情况,格式为 192.168.0.255)
编辑:许多答案没有给出我预期的结果,因为我有两个不同的网络 IP。 Torial的代码成功了(它给了我两个 IP 地址)。
编辑 2:感谢 Brian R. Bondy有关子网掩码的信息。
最佳答案
这个问题比看起来更棘手,因为在许多情况下,没有“本地计算机的 IP 地址”,而是有许多不同的 IP 地址。例如,我现在正在输入的 Mac(这是一个非常基本的标准 Mac 设置)具有以下关联的 IP 地址:
fe80::1%lo0
127.0.0.1
::1
fe80::21f:5bff:fe3f:1b36%en1
10.0.0.138
172.16.175.1
192.168.27.1
...这不仅仅是弄清楚以上哪个是“真实IP地址”的问题,或者......它们都是“真实的”和有用的;有些比其他的更有用,具体取决于您要使用这些地址的目的。
根据我的经验,获取本地计算机“IP 地址”的最佳方法通常不是查询本地计算机,而是询问程序正在与之通信的计算机,它认为您的计算机的 IP 地址是什么.例如如果您正在编写客户端程序,请向服务器发送一条消息,要求服务器将您的请求来自的 IP 地址作为数据发送回。这样,您将知道相关 IP 地址是什么,给定您正在与之通信的计算机的上下文。
也就是说,该技巧可能不适用于某些目的(例如,当您不与特定计算机通信时),因此有时您只需要收集与您的计算机关联的所有 IP 地址的列表。在 Unix/Mac (AFAIK) 下最好的方法是调用 getifaddrs() 并迭代结果。在 Windows 下,尝试 GetAdaptersAddresses() 以获得类似的功能。有关两者的用法示例,请参见 this file 中的 GetNetworkInterfaceInfos() 函数。 .
关于c++ - 如何获取本地计算机的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/122208/