代码之家  ›  专栏  ›  技术社区  ›  stringo0

Sockets-如何找出分配给我的端口和地址

  •  35
  • stringo0  · 技术社区  · 14 年前

    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和端口?

    2 回复  |  直到 8 年前
        1
  •  72
  •   mark4o    14 年前

    如果是服务器套接字,应该调用 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()

        2
  •  5
  •   Community Dunja Lalic    7 年前

    代码中的注释是错误的。 INADDR_ANY 不会自动放置服务器的IP。它本质上 0.0.0.0 ,根据mark4o的解释 answer .