在 C 套接字中获取客户端的 IP 地址
Get IP address of the client in C sockets
如何获取我的服务器所连接的客户端的IP地址?
以下是我接受新客户的方式:
newsockfd = accept(sockfd, (struct sockaddr*)&clt_addr, &addrlen);
我尝试了以下方法:
printf("ip is: %s\n", inet_ntoa(clt_addr.sin_addr));
但我收到的 127.0.0.1 不是我的 IP 地址。会不会跟我用localhost测试客户端和服务器有关系?
Could it have something to do with me using localhost to test my client and server?
是的。如果您连接到本地主机上的服务器,则客户端也将是本地主机。此连接不是通过 Internet 进行的,不涉及网络硬件,客户端数据包将来自本地主机。这被称为 loopback 并且完全发生在软件中。
如果客户端要使用服务器的外部 IP 地址连接到服务器,它将必须通过外部路由进行连接,因此需要一个可路由的 IP 地址。例如,我可以连接到本地主机上的服务器,但我无法使用我的可路由 IP 地址,因为我的路由器阻止传入连接。
如何获取我的服务器所连接的客户端的IP地址? 以下是我接受新客户的方式:
newsockfd = accept(sockfd, (struct sockaddr*)&clt_addr, &addrlen);
我尝试了以下方法:
printf("ip is: %s\n", inet_ntoa(clt_addr.sin_addr));
但我收到的 127.0.0.1 不是我的 IP 地址。会不会跟我用localhost测试客户端和服务器有关系?
Could it have something to do with me using localhost to test my client and server?
是的。如果您连接到本地主机上的服务器,则客户端也将是本地主机。此连接不是通过 Internet 进行的,不涉及网络硬件,客户端数据包将来自本地主机。这被称为 loopback 并且完全发生在软件中。
如果客户端要使用服务器的外部 IP 地址连接到服务器,它将必须通过外部路由进行连接,因此需要一个可路由的 IP 地址。例如,我可以连接到本地主机上的服务器,但我无法使用我的可路由 IP 地址,因为我的路由器阻止传入连接。