如何在Unix套接字编程中获取本地IP地址和端口?
我用这个作为地址来创建一个新的服务器(socket()
,bind()
,listen()
):为0如何在Unix套接字编程中获取本地IP地址和端口?
我希望得到一个服务器侦听任何接口上
struct sockaddr_in newServer;
memset(&newServer, 0, sizeof(newServer));
newServer.sin_family = AF_INET;
newServer.sin_addr.s_addr = htonl(INADDR_ANY);
newServer.sin_port = htons(UNUSED_PORT);
宏UNUSED_PORT定义并在未使用的端口上。
我试图使用getsockname()
来获取我的本地IP地址和端口,但我得到了一些奇怪的输出。下面的输出代码:
struct sockaddr_in localAddress;
socklen_t addressLength;
getsockname(newServerfd, (struct sockaddr*)&localAddress, \
&addressLength);
printf("local address: %s\n", inet_ntoa(localAddress.sin_addr));
printf("local port: %d\n", (int) ntohs(localAddress.sin_port));
例如,我0.255.255.255:0,0.0.0.0:0,255.127.0.0:36237等 和我的系统为Mac OS X 10.7.3。
--update--
使用socklen_t addressLength = sizeof(localAddress);
(感谢@cnicutar和@Jonathan莱弗勒)后,我总是得到0.0.0.0本地IP;那还好吗?
你需要调用getsockname
之前初始化addressLength
:
socklen_t addressLength = sizeof(localAddress);
ommmm ...我错过了 - -b .. – 2012-04-16 01:07:00
这次我总是得到本地ip的0.0.0.0,这是正常的吗? – 2012-04-17 03:20:43
如果你已经绑定到0.0.0.0,那么是的。 – 2012-04-17 04:09:29
你真的读[http://beej.us/guide/bgnet/](http://beej.us/guide/bgnet/ )? – 2012-04-16 05:52:41
上面的一个是Beej的网络编程指南 – 2012-04-16 06:04:47
@macs似乎每个人都在堆栈溢出推荐本指南,真的很好吗? – 2012-04-17 03:19:27