c++ - 如何获取本地计算机的 IP 地址?

标签 c++ sockets networking

在 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/

相关文章:

Java HTTPS 代理/重定向服务器

javascript - 使用您知道将在 Javascript 和 Angular 中创建的对象的函数(以 Peerjs 和 Socket.io 为特色)

Docker Compose 网络多播

c++ - 在 header 中声明时未知类型名称

c++ - 防止 Windows 程序将 ^Z 解释为文件结尾

c++ - Qt - 为什么将 '&' 添加到字符串中?

c++ - 套接字程序 Python vs C++ (Winsock)

c - 在 TCP 的 nanomsg 中使用哪种类型的套接字

Android 模拟器访问 IPv6 可能吗?网络不可达

c++ - 我的代码有什么问题...当条件满足时循环不关闭