Java根据ip地址获得机器名速度慢的原因?

问题描述

我在做登录的时候作了个记录客户端的登录机器名和ip,但是有的时候登录特别慢,我跟踪了下代码,发现慢的地方在根据IP地址获得机器名这段代码。但是我查了好久没有找到原因,请高手们指点一下。下面是我的代码:第一个方法获得IP地址,第二个方法是通过上面获得IP得到机器名。privatestaticStringgetClientIpAddr(HttpServletRequestrequest){//分不同的特殊情况获取用户客户端ip地址Stringip=request.getHeader("X-Forwarded-For");if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("Proxy-Client-IP");}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("WL-Proxy-Client-IP");}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("HTTP_CLIENT_IP");}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("HTTP_X_FORWARDED_FOR");}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getRemoteAddr();}returnip;}privatestaticStringgetClientComputerName(HttpServletRequestrequest,Stringip){StringclientHostName=null;try{clientHostName=InetAddress.getByName(ip).getHostName();}catch(UnknownHostExceptione){logger.error("获取客户端机器名失败,客户端ip地址为:"+ip);e.printStackTrace();}returnclientHostName;}StringipAddress=getClientIpAddr(request);StringcomputerName=getClientComputerName(request,ipAddress);

解决方案

解决方案二:
为什么要根据IP获得机器名呢?慢的原因可能是要做反向DNS查询,但一般都不配的。。。。
解决方案三:
这是InetAddress提供的方法;但是我部署环境都一样在一个地方没问题但是在另外一套环境就特别慢
解决方案四:
有什么解决办法吗?
解决方案五:
引用2楼MINGHUI119的回复:

这是InetAddress提供的方法;但是我部署环境都一样在一个地方没问题但是在另外一套环境就特别慢

你不能说这个方法是JDK里面某个类提供的,就觉得和你无关了。其实所有的东西都是在你自己的环境里运行的,有些东西,你要知其所以然。那你两边的环境是不是都是DHCP的呢?DHCP的服务器是不是都一样呢?然后客户端的IP地址是不是都在一个段内呢?是不是通过公网过来呢?
解决方案六:
最快的办法么,把你这些要访问的IP地址全部写在你的host文件里。。。
解决方案七:
都写到host,这个办法肯定不行,客户量太大,而且IP都是自动获得。这边用的都是虚拟环境,都是克隆过去的;
解决方案八:
同求.....
解决方案九:
这问题没有遇到过!
解决方案十:
引用6楼MINGHUI119的回复:

都写到host,这个办法肯定不行,客户量太大,而且IP都是自动获得。这边用的都是虚拟环境,都是克隆过去的;

所以,你看一下DHCP的服务器是不是都配置反向解析。另外,我个人觉得这个功能基本上没什么意思。。。。
解决方案十一:
这个解析没什么意义
解决方案十二:
这个解析没什么意义+1
解决方案十三:
java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名。返回结果:此IP地址的主机名;如果安全检查不允许操作,则返回IP地址的文本表示形式。1.如果不能立即获取主机名,程序会继续尝试一段时间,若干时间后标志为失败,然后返回IP地址。2.由于并不是总能成功获取,因此可能会出现长时间等待的情况,这个时间大概有十几秒钟。在编写实时的网络程序时,应该注意这个问题。如果允许,尽量采用IP地址代替主机名称。3.即使通过getHostName方法成功获取主机名称,不同的平台的主机名的格式也是不同的。在编写跨平台的网络程序时,应该注意这个问题。
解决方案十四:
有没有能够替换的方法,不通过java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名;求高手指教!!!
解决方案十五:
引用13楼MINGHUI119的回复:

有没有能够替换的方法,不通过java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名;求高手指教!!!

这个讨论真心没意义。如果网络不在你的应用控制范围内,你拿了没有意义。如果在你控制范围内,那么DNS的反向解析配置好就可以,包括DHCP,也是可以配置的。
解决方案:
LZ你确定你理解”主机名“这个概念的定义吗?

时间: 2024-10-30 06:18:05

Java根据ip地址获得机器名速度慢的原因?的相关文章

wi-fi-ios:有没有办法,在APP内实现:连接某一个WIFI后,搜索,获取本网络所有的在线的IP地址和网络名

问题描述 ios:有没有办法,在APP内实现:连接某一个WIFI后,搜索,获取本网络所有的在线的IP地址和网络名 有没有办法,在APP内实现:连接某一个WIFI后,搜索并获取本网络所有的在线的机器的IP地址和机器名,最近在做一个远程控制的项目,不知道大神们能不能给点经验. 解决方案 alert(1); 解决方案二: 应该是可以的,之前看到有个APP,可以看到当前WiFi连接的设备,跟防蹭网有关的 解决方案三: 如果暴力搜索的话,就是判断一个ip地址是否可通你也要256个很耗时间的

java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名

问题描述 有没有不通过java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名的方法,而且速度较快的方法:当然要用Java写. 解决方案

Delphi中根据IP地址得到主机名

本实例演示如何利用TUdpSocket组件获取IP地址和主机名. 向窗体上添加一个TUdpSocket组件,如图1所示. 图1 主界面 TUdpSocket组件中有两个属性--LocalHostName和LocalHostAddr,其中分别存储了本地计算机的主机名和IP地址,所以在窗体的初始化中添加如下响应代码来显示主机名和IP地址: procedure TForm1.FormCreate(Sender: TObject); begin self.Caption:=UdpSocket1.Loca

win7通过ip地址查找计算机名的两种方法

  win7通过ip地址查找计算机名的两种方法           解决方法一: 1.通过"开始"菜单,输入cmd,进入到类Dos页面.(也可以通过快捷键:Windows徽标键+R,然后输入cmd,进入到类Dos页面); 2.然后,在该页面,输入ipconfig,然后点击回测键; 3.最后,出现如图所示的页面,从其中的信息即可知道,该电脑的IP地址为192.168.1.123(局域网IP地址). 解决方法二: 1.首先,通过"开始"菜单,输入cmd,进入到类Dos页

总结有关IP地址、主机名及MAC三者之间的联系

相信很多做网络的兄弟,也和烂泥一样经常碰到由IP地址查找主机名等等之类的问题,那么今天我就此类问题做一个总结. 首先在此声明,我这个总结全部是基于windows自身的网络工具进行操作的,不使用第三方软件的.先看我手工绘制的这三者之间的关系,如下图: 一.知道主机名,查看IP地址及MAC地址 Ping 主机名 我们可以得到IP地址,然后我们IP地址可以得到MAC地址具体命令如下: Ping 主机名→IP地址 Nbtstat –A IP地址→MAC地址 二.知道IP地址,查看主机名及MAC地址 Pi

怎么取得工作站的ip地址或电脑名?

问题描述 使用Notes公式或LS怎么取得工作站的ip地址或电脑名? 解决方案 解决方案二:如果是客户端,可能通过api来完成了.如果是bs方式的,可以通过cgi域来完成,只能取得IP,电脑名,好象没有参数.

Java判断IP地址为内网IP还是公网IP的方法_java

本文实例讲述了Java判断IP地址为内网IP还是公网IP的方法.分享给大家供大家参考.具体分析如下: tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0-172.31.255.255 192.168.0.0/16:192.168.0.0-192.168.255.255 那么,直接上代码吧: 复制代码 代码如下: public static boolea

[j2se]利用JAVA获得IP地址的法子

ip地址|j2se 如何用Java获得一个域名的IP地址呢?提供这个功能的类叫做java.net.InetAddress.我们假设现在有这样一个域名,它用一个静态的 getByName来重新获得一个InetAddress,然后得到可以读出的IP地址.下面的代码是非常基本的命令行. import java.net.InetAddress; import java.net.UnknownHostException; public class NsLookup { static public void

Delphi编程根据IP地址得到主机名

在网络程序的设计过程中,经常需要根据得到的IP地址取得主机的名称,本实例将演示如何根据用户输入的IP地址获取对应主机的名称. 向窗体上添加两个TLabel组件.两个TEdit组件和一个TButton组件,设计完成的主界面如图1所示. 图1 主界面 在程序运行过程中首先需要向程序的uses段中加入Winsock,这样就可以调用与Winsock相关的函数进行操作. Attributes和FileName是两个全局变量.其中Word类型的Attributes变量用于存储文件的属性,而String类型的