Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
C获取侦听服务器的IP_C_Sockets - Fatal编程技术网

C获取侦听服务器的IP

C获取侦听服务器的IP,c,sockets,C,Sockets,我正在使用C套接字编写一个客户机/服务器程序。我指定服务器可以通过在sockaddr\u in.sin\u addr.s\u addr中使用INADDR\u any监听任何网络接口。这相当于IP为0.0.0.0。我是否可以获取服务器正在侦听的实际IP?(例如192.168.1.100)当您将侦听套接字绑定到INADR\u ANY时,该套接字侦听所有可用的本地IP。无法从套接字确定它正在侦听的IP。如果需要这些信息,则必须分别枚举本地IP(在这种情况下,如果需要检索预接受绑定的详细信息,可以将每个

我正在使用C套接字编写一个客户机/服务器程序。我指定服务器可以通过在sockaddr\u in.sin\u addr.s\u addr中使用INADDR\u any监听任何网络接口。这相当于IP为0.0.0.0。我是否可以获取服务器正在侦听的实际IP?(例如192.168.1.100)

当您将侦听套接字绑定到INADR\u ANY时,该套接字侦听所有可用的本地IP。无法从套接字确定它正在侦听的IP。如果需要这些信息,则必须分别枚举本地IP(在这种情况下,如果需要检索预接受绑定的详细信息,可以将每个IP分别
bind()
绑定到自己的套接字)。但是,一旦
accept()
返回一个已建立的客户端连接,您就可以在已接受的套接字上使用
getsockname()
,以了解哪个特定的IP接受了连接。

我终于能够找到一个连接

编辑:链接已失效,请参见:


希望它能像对我一样对其他人有所帮助。

在建立连接之前还是之后?服务器可能正在侦听多个地址。之前。在我的情况下,我只会有一个IP。我只是让系统来决定。但是我仍然想知道它决定了什么。服务器将监听所有可用的接口。即使是一个接口也可能有多个IP地址。这是枚举网络接口及其地址的一种特殊情况——当然,您还有环回设备和地址。看起来这应该会有所帮助:不必讨论多个接口/IP的复杂性。。。假设我的机器的IP地址是192.168.1.100。我只想在绑定套接字后以编程方式检索它@blueshift的链接可能会有所帮助,但我认为可能会有一个更简单的解决方案。我希望您不需要IPv6支持,因为这对IPv6不起作用。不,我不需要。但是,如果你解释一下为什么不合适,可能会对那些这样做的人有所帮助。我认为使用的函数调用具有IPv6等价物。
getaddrinfo
函数(,)支持IPv6并执行相同的功能。您的链接已断开(假定是暂时的)。@FakeName我添加了一个internet存档链接以进行补偿。