1)InetAddress.getLocalHost().getHostAddress()
今天把在Windows下运行很正常的程序拿到Linux下测试,却出现了问题,经过检查发现是InetAddress.getLocalHost().getHostAddress() 取本地IP地址时出现了问题。因为期望得到的IP是222.xxx.xxx.xx,但实际打印出来的IP地址却是127.0.0.1。
查看 /etc/hosts 文件,里面有一条本机名和 222.xxx.xxx.xx这个 IP 对应的记录。把它注释掉,然后修改本机的主机名,又在 hosts 文件中加入主机名和222. xx.xx.xx的对应,问题解决了。
通过问题的解决方法,我们可以发现InetAddress.getLocalHost().getHostAddress() 方法找到本机 IP的实现方法——依靠本机的机器名去查询IP 地址,和 ping `hostname` 返回的 IP 地址是同一个,并不是 ipconfig 方法得到的 eth0 IP 地址。
2)request.getLocalAddr() ;
<%@ page contentType="text/html;charset=GBk" import="java.util.*"%> <html> <head> <title>请求信息</title> </head> <body> <p>使用request对象的方法获取信息</p> <% //服务器 String localName=request.getLocalName(); String serverName = request.getServerName(); String localAddr=request.getLocalAddr(); int localPort=request.getLocalPort(); int serverPort = request.getServerPort();%> <b>服务器</b>:<%= localName %><br/> <b>服务器端IP</b>:<%= localAddr %><br/> <b>服务器端口</b>:<%= localPort %><p/> //客户端信息 String remoteHost=request.getRemoteHost(); String remoteAddr=request.getRemoteAddr(); int remotePort=request.getRemotePort();%> <b>浏览器端</b>:<%= remoteHost %><br/> <b>浏览器端IP是</b>:<%= remoteAddr %><br/> <b>浏览器端口</b>:<%= remotePort %><p/> <% //协议相关 String pro=request.getProtocol(); String pro1=request.getScheme(); int len=request.getContentLength(); String type=request.getContentType(); String charEncode=request.getCharacterEncoding(); %> <b>协议版本</b>:<%= pro %><br/> <b>协议</b>:<%= pro1 %><br/> <b>数据内容长度</b>:<%= len %><br/> <b>数据类型</b>:<%= type %><br/> <b>字符编码方式</b>:<%= charEncode %><p/> </body> </html>