Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查找计算机的IP地址? 我正在编写一个C++程序,它使用网络套接字。我需要找出计算机的IP地址,以便向用户显示。该程序必须在Windows和Linux上运行_C++_Sockets_Ip Address - Fatal编程技术网

如何查找计算机的IP地址? 我正在编写一个C++程序,它使用网络套接字。我需要找出计算机的IP地址,以便向用户显示。该程序必须在Windows和Linux上运行

如何查找计算机的IP地址? 我正在编写一个C++程序,它使用网络套接字。我需要找出计算机的IP地址,以便向用户显示。该程序必须在Windows和Linux上运行,c++,sockets,ip-address,C++,Sockets,Ip Address,我听说一台计算机可以有多个IP地址。我想要一个不同计算机上的其他程序可以用来连接到计算机的程序 以下是我已经拥有的相关代码,变量在其他地方声明: master = new fd_set; FD_ZERO(master); struct sockaddr_in my_addr; listener = socket(PF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(port); my_

我听说一台计算机可以有多个IP地址。我想要一个不同计算机上的其他程序可以用来连接到计算机的程序

以下是我已经拥有的相关代码,变量在其他地方声明:

master = new fd_set;
FD_ZERO(master);
struct sockaddr_in my_addr;

listener = socket(PF_INET, SOCK_STREAM, 0);

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(my_addr.sin_zero, '\0', sizeof my_addr.sin_zero);

bind(listener, (struct sockaddr *)&my_addr, sizeof my_addr);

listen(listener, 10);

FD_SET(listener, master);

fdmax = listener;
我听说某个地方有一台电脑 可以有多个IP地址。我想要 其他程序所使用的那个 不同的计算机可以用来连接 到电脑

嗯。。。那可能是他们中的任何一个。如果一台计算机有多个IP地址,则可以在其中任何一个上访问它。当然,其中一个可能受到不同防火墙规则的约束,或者它们可能位于两个完全不同的网段上,但无法检测任何和所有这些情况

我听说某个地方有一台电脑 可以有多个IP地址。我想要 其他程序所使用的那个 不同的计算机可以用来连接 到电脑


嗯。。。那可能是他们中的任何一个。如果一台计算机有多个IP地址,则可以在其中任何一个上访问它。当然,其中一个可能受不同的防火墙规则约束,或者可能位于两个完全不同的网段上,但无法检测任何和所有这些情况。

这取决于您是否试图获取LAN IP地址,即计算机组中的计算机地址或服务的IP地址每次您连接到internet时,提供商都会向您提供。后者可以用一个查询来标识,我猜您会找到一个合适的C++库来完成对一些IP检测Web服务的Google搜索。
如果您想要一个快速而肮脏的解决方案,您可以尝试重新设置并读回内容。

这取决于您是否试图获取LAN IP地址,即计算机组中的计算机地址,或者每次连接到internet时服务提供商给您的IP地址。后者可以用一个查询来标识,我猜您会找到一个合适的C++库来完成对一些IP检测Web服务的Google搜索。
如果您想要一个快速而肮脏的解决方案,您可以尝试重新设置并读回内容。

我相信您可以将getaddrinfo与侦听器套接字一起使用,以获取绑定到的套接字的IP地址。

我相信您可以将getaddrinfo与侦听器套接字一起使用,获取绑定到的套接字的IP地址。

我最近在OS X上发布了一个类似的问题。我收到的建议是使用0.0.0.0或INADDR_ANY。这将导致您的套接字侦听所有可用地址,因此您无需找出哪个地址是正确的。

我最近在OS X上发布了一个类似的问题。我收到的建议是使用0.0.0.0或INADDR_ANY。这将导致您的套接字侦听所有可用地址,因此您无需确定哪一个是正确的地址。

在Windows上,您要使用-这将列出计算机中的所有适配器以及绑定到它们的IP地址。它也支持IPv6地址。您也可以使用,但不支持IPv6


在Linux上,我们读取/proc/net/dev和/proc/net/if_inet6并解析其结果。

在Windows上,您要使用-这列出了您机器中的所有适配器以及绑定到它们的IP地址。它也支持IPv6地址。您也可以使用,但不支持IPv6


在Linux上,我们阅读/proc/net/dev和/proc/net/if_inet6并解析结果。

您可以使用该项目作为参考

您可以参考该项目

如果你澄清了为什么你需要这个,更好的答案会出现,而不是你可能有很多,这取决于…一台计算机可以有和你在机器上安装的适配器一样多的IP地址。这些可以是物理多个NIC、虚拟网络的虚拟IP或系统本地主机。实际上,您可以将多个静态IP绑定到单个NIC。这种情况在托管的IIS服务器中经常发生。从新台币4天起就一直是这样。。。我相信SP4或SP5提供了这种行为。这听起来似乎很熟悉:其他语言也有这种行为。这个问题完全是重复的。如果可以的话,我会关闭它。如果你澄清你为什么需要这个,更好的答案会出现,而不是你可能有很多,这取决于…一台计算机可以有和你在机器上安装的适配器一样多的IP地址。这些可以是物理多个NIC、虚拟网络的虚拟IP或系统本地主机。实际上,您可以将多个静态IP绑定到单个NIC。这种情况在托管的IIS服务器中经常发生。从新台币4天起就一直是这样。。。我相信SP4或SP5提供了这种行为。这听起来似乎很熟悉:其他语言也存在

.这个问题完全是重复的。如果可以的话,我会关闭它。如果你想要在互联网上看到的IP地址,这是有效的。但除非计算机是面向互联网的,否则这通常是由防火墙处理的NAT地址,实际上并不反映计算机系统本身的实际IP。你是对的,但这在某种程度上属于我指出的第一个选项。在这种情况下,您可能需要您的LAN地址,因为您与其他系统共享您的WAN地址。如果您需要在Internet上看到的IP地址,则此操作有效。但除非计算机是面向互联网的,否则这通常是由防火墙处理的NAT地址,实际上并不反映计算机系统本身的实际IP。你是对的,但这在某种程度上属于我指出的第一个选项。在这种情况下,您可能需要您的LAN地址,因为您与其他系统共享您的WAN地址。事实并非如此。一台计算机A属于网络1和2,而计算机B只属于网络2,那么计算机B必须使用网络2上计算机A的IP地址。这怎么不正确?当然,你是对的,计算机B必须使用网络2地址,但这基本上重申了斯宾塞关于不同网段的观点。以编程方式根本无法确定最终用户将需要哪个IP地址。@Rob:哎呀,你说得对,我一定错过了关于不同网段的那一部分。使问题更复杂的是,所涉及的机器可能在执行NAT的路由器或负载平衡器后面。这不是真的。一台计算机A属于网络1和2,而计算机B只属于网络2,那么计算机B必须使用网络2上计算机A的IP地址。这怎么不正确?当然,你是对的,计算机B必须使用网络2地址,但这基本上重申了斯宾塞关于不同网段的观点。以编程的方式根本无法确定最终用户将需要哪个IP地址。@Rob:哎呀,你说得对,我一定错过了关于不同网段的那一部分。使问题更复杂的是,所讨论的机器可能在执行NAT的路由器或负载平衡器后面。当然,如果你在OSX上,你不会想这样做,因为即使在空闲时,监听某些隧道套接字也会耗费CPU。使用特定IP版本的Getaddrinfo…这很公平。我只是在为我写一个小应用程序,但你的观点被采纳了。当然,如果你在OSX上,你不会想这么做,因为在一些隧道套接字上进行监听即使在空闲时也会耗费CPU。使用特定IP版本的Getaddrinfo…这很公平。我只是在为我写一个小应用程序,但你的观点被采纳了。