当我使用RemoteServer.getClientHost()时,我在red hat上获得127.0.0.1,但在Windows上,我得到我的本地IP 192.168.1.15,linux需要不同的方法吗? 使用相同的代码:
String chost = getClientHost();// 客户端主机
if (logger.isDebugEnabled()) {
StringBuffer strb = new StringBuffer();
strb.append("客户端主机:").append(chost).append(",用户名:").append(username);
logger.debug(strb.toString());
}
boolean login = rmiImpl.serverLogin(chost, username, password);
System.out.println(chost+"........"+username+"......."+password);
if (!login) {
logger.debug("登录失败...");
throw new LoginException();
}
控制台出现:127.0.0.1 ........ TestWebServer ....... 123456
我的英语不是很好!
答案 0 :(得分:2)
但是为什么我通过相同的代码在不同的操作系统中获得不同的IP
简短的回答是这是一个配置问题/问题。
通过该通话获得的IP地址取决于三件事:
如果没有更多信息,我们无法确定,但可能是这样:
Linux计算机已配置为将“localhost”映射到IP地址127.0.0.1
,该地址是“环回”网络接口的地址。 (那不是物理网络接口......)
Windows计算机已配置为将“localhost”映射到主机的“真实”IP地址。
将“localhost”映射到127.0.0.1 IP地址是Linux / UNIX计算机的常规做法,至少(至少)回到4.x bsd UNIX天。我不确定Windows上的正常做法是什么,但显然在某些版本的Windows(开箱即用)上根本没有配置“localhost”。而且有人以不明智的方式配置它是合理的。
(我没有谈到代理问题。但如果这就是问题所在,你几乎没有机会做任何事情。)
答案 1 :(得分:0)
我假设你在同一台机器上运行两个操作系统。
可能是因为unix系统首先列出了loopback接口,因此当windows首先列出以太网接口并返回以太网地址时,会返回该地址。
答案 2 :(得分:0)
在@ StephenC的答案上稍微扩展一下:
getClientHost()
返回传入套接字的远程套接字地址。你可以忽略RMI代理的影响,除非你从我那里买了一个;-)或者除非你使用了可怕的HTTP隧道选项。