我有一个Node.js服务器,客户端是一个移动应用程序。我想知道哪个是了解服务器本地ip的最佳方法。我的意思是......
服务器在localhost:8080中运行,客户端必须连接到服务器,如192.168.0.107:8080(pc的本地IP)。
我想访问此IP,192.168.0.107而不在客户端代码中写入,因为它可能会更改。
答案 0 :(得分:2)
我的猜测是你有一台带有动态IP的服务器,你想要将你的客户端连接到这个IP而不用硬编码到客户端的代码。我说有很多选择:
答案 1 :(得分:1)
恕我直言,这是不可能以一种非常可靠的方式。这有几个原因,包括:
所以要么你需要缩小你想要达到的目标,要么你必须忍受某种不确定性。
最简单的方法是使用主机名进行DNS查找,以获取众所周知的IP地址,然后选择其中一个(但是你想要这样做,这取决于你)。
PS:我不完全确定我真的有你的问题。如果我理解正确,你想在客户端找到客户端的IP地址,因为你需要将它发送到服务器,对吗?答案 2 :(得分:0)
如果你正在寻找一个简单的答案,有一个npm模块为你做这个,它真的很小,所以只需安装它并使用说明来获取客户端的IP:
https://www.npmjs.com/package/request-ip
使用入门:
var requestIp = require('request-ip');
// inside middleware handler
var ipMiddleware = function(req, res, next) {
var clientIp = requestIp.getClientIp(req); // on localhost > 127.0.0.1
next();
};
答案 3 :(得分:0)
根据您实际实施的网络拓扑详细信息(不包含在您的问题中),您至少有三种不同的选择:
服务器直接使用Public Interent
在公共网络(例如开放互联网)上,DNS是此类问题的正常答案。您可以按照以下步骤操作:
确保您拥有公共IP地址。您可能知道或不知道192.168.0.107
不是公共IP地址。这是一个本地互联网地址,不能在开放的公共互联网上路由。
使用DNS服务,创建一个DNS记录,在主机名之间建立链接,例如" google.com"和您的公共IP地址。
将客户端编码为连接到您的"名称",而不是您的IP地址。
仅限专用网络上的服务器和移动应用
如果您的移动应用仅在您的专用网络上运行(可能通过WiFi),那么您可以在专用网络上配置自己的DNS服务器,该服务器与上述步骤基本相同,但适用于私人地址比如你私人网络上的192.168.0.107
。
服务器位于家庭网络上,想要从Internet访问
如果您的服务器位于您的专用网络中(因此只有一个私有IP地址),但您希望能够从公共网络访问它,那么您需要在此处配置某种路由或端口转发。您的专用网络和公共网络之间的边界。在家庭路由器的情况下,这将涉及以下步骤:
答案 4 :(得分:0)