我无法解决这个问题 - 我正在使用本指南使用C语言中的套接字 - http://binarii.com/files/papers/c_sockets.txt
我正在尝试使用以下方式自动获取我的IP和端口:
server.sin_port = 0; /* bind() will choose a random port*/
server.sin_addr.s_addr = INADDR_ANY; /* puts server's IP automatically */
...
...
bind(int fd, struct sockaddr *my_addr,int addrlen); // Bind function
成功绑定后,如何找出实际分配的IP和端口?
答案 0 :(得分:69)
如果它是服务器套接字,您应该在套接字上调用listen()
,然后getsockname()
找到它正在侦听的端口号:
struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) == -1)
perror("getsockname");
else
printf("port number %d\n", ntohs(sin.sin_port));
对于IP地址,如果使用INADDR_ANY
,则服务器套接字可以接受任何机器IP地址的连接,并且服务器套接字本身没有特定的IP地址。例如,如果您的计算机有两个IP地址,那么您可能会在此服务器套接字上获得两个传入连接,每个连接具有不同的本地IP地址。您可以在套接字上使用getsockname()
来获取特定连接(来自accept()
),以便找出该连接上使用的本地IP地址。
答案 1 :(得分:5)
代码中的注释是错误的。 INADDR_ANY
不会自动放置服务器的IP。由于mark4o的answer中解释的原因,它基本上放了 0.0.0.0 。