我用這個作爲地址來創建一個新的服務器(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;那還好嗎?
你真的讀[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