【发布时间】:2012-03-17 22:05:19
【问题描述】:
我正在尝试开发一个系统,其中有不同的节点在不同的系统或同一系统的不同端口上运行。
现在所有节点都创建一个带有目标 IP 的 Socket,作为称为引导节点的特殊节点的 IP。然后节点创建自己的ServerSocket 并开始监听连接。
引导节点维护一个节点列表并在被查询时返回它们。
现在我需要的是节点必须将其 IP 注册到引导节点。一旦客户端连接到引导节点的ServerSocket,我尝试使用cli.getInetAddress(),但这不起作用。
- 如果可用,我需要客户端注册其 PPP IP;
- 否则 LAN IP(如果可用);
- 否则它必须注册 127.0.0.1,假设它是同一台计算机。
使用代码:
System.out.println(Inet4Address.getLocalHost().getHostAddress());
或
System.out.println(InetAddress.getLocalHost().getHostAddress());
我的 PPP 连接 IP 地址是:117.204.44.192 但上面返回我 192.168.1.2
编辑
我正在使用以下代码:
Enumeration e = NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements())
{
NetworkInterface n = (NetworkInterface) e.nextElement();
Enumeration ee = n.getInetAddresses();
while (ee.hasMoreElements())
{
InetAddress i = (InetAddress) ee.nextElement();
System.out.println(i.getHostAddress());
}
}
我能够获取所有NetworkInterfaces 关联的所有IP 地址,但是我如何区分它们呢?这是我得到的输出:
127.0.0.1
192.168.1.2
192.168.56.1
117.204.44.19
【问题讨论】:
-
Inet4Address.getLocalHost() 应该可以正常工作吗?
-
如果我添加 n.isPointToPoint() 在循环内部会起作用吗?如果没有找到点对点网络,我的想法是返回“127.0.0.1”。这行得通吗??
-
@sasidhar :请不要发布您的真实 IP 地址。写117.xxx.xxx.xxx,私网IP就好了。
-
@GagandeepBali 感谢您的建议,但我的 IP 是动态 IP,每次断开和连接互联网时我都会获得一个新 IP。所以应该不是问题,我猜。