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>
问题补充:
用此程序运行我的IP是127.0.0.1
但是用cmd->ipconfig查的结果却给这个不一样
是怎么回事啊
如果你是在你自己的电脑上运行这个程序的话,只能得到以情况中的一种:
你用这个程序的时候在地址栏填的是:http://127.0.0.1
(或http://localhost
),这是本地回路,只能得到127.0.0.1这个IP,如果你是用的:http://
你的内网IP,这样只能得到 你的内网IP 的值。如果你是用的:http://
你的公网IP,这样只能得到 你的公网IP 的值。
要想一定得到你的公网IP的值只有方问公网的程序得到的才是。
ipconfig命令可以得到本地IP(也就是内网IP),如果是用的这台电脑拨的号,还可以得到公网IP。如果不是这台电脑拨号,使用的是共享上网这里也只能得到内网IP。
另外不知道你说的是想知道内网IP还是公网IP。
分享到:
相关推荐
JMS是用于实现消息中间件通信的API,支持点对点和发布/订阅两种消息模式。它提供了异步通信机制,适用于需要高可靠性和实时性的分布式系统。 ##### 9. Java IDL (Interface Definition Language) Java IDL是CORBA...
你会使用哪种方法从请求流中获取表单数据?** - **选项解析:** - **a) getParameter()**: 获取特定名称的参数值。 - **b) setParameter()**: 设置参数值,此方法不存在。 - **c) init()**: 初始化Servlet。 - ...
- **Session**:服务器端存储,用于维护用户的会话状态。 **6. EJB 2 和 EJB 3 区别** - **EJB 2**:复杂,需要编写大量代码和配置。 - **EJB 3**:简化开发过程,引入了注解和POJO。 #### 第三层:数据库招式...
下面就以两种不同的用户来分析博客网站的需求。 4.2.1注册博友 首先必须在博客首页中登录填写用户名和密码,这样才能执行一些相关操作,不然就是普通用户只能查看一些信息,而不能发表博文。可以在管理页面上添加...
13. **Servlet的性质**:Servlet是用Java编写的服务器端程序,它可以作为独立的对象被服务器调用,同时也可以调用其他服务器资源,因此它具有对象的特性。 14. **JSP获取请求参数**:在JSP中,可以使用`("location...
本课程“[视频讲解]运用J2ME和J2EE实施跨平台无线应用”专注于讲解如何利用这两种技术来创建能够运行在不同操作系统上的应用程序。下面将详细阐述J2ME和J2EE的相关知识点,并结合跨平台无线应用的开发实践进行解析。...
会话跟踪技术包括Cookie、Session、URL重写等,其中Session是最常用的,它在服务器端保存会话状态,而Cookie在客户端保存会话ID。 #### 38. EL表达式隐藏对象 EL表达式中有pageScope、requestScope、sessionScope...
这两种格式便于数据序列化和反序列化,适合在网络上传输。 7. **AJAX异步通信**:为了实现即时聊天效果,客户端可能会使用JavaScript的AJAX(Asynchronous JavaScript and XML)技术进行异步更新,无需刷新整个页面...
在JavaWeb领域,软件编程体系主要涉及两种常见的架构模式:C/S(Client/Server)结构和B/S(Browser/Server)结构。C/S结构是早期的分布式计算模型,其中客户端和服务器端各自承担不同的功能。客户端通常需要安装...
- **功能描述**:服务器端负责启动各项服务,如监听客户端请求、处理消息转发等。 - **技术实现**:服务器监听特定端口接收客户端连接请求,并对每个连接建立相应的会话管理机制。 ##### 3.7 停止服务(服务器端) ...
2. **EJB(Enterprise JavaBeans)**:EJB是J2EE中的核心组件,提供了一种规范来创建可部署在服务器端的业务逻辑。在这个SMS服务中,EJB可能被用来封装处理短信发送、接收和存储的逻辑,同时保证了服务的安全性和...
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器...
EJB是一种服务器端组件架构,用于简化使用Java构建企业级分布式组件应用的过程。EJB的优势在于,它允许开发者在不编写复杂的分布式组件框架的情况下,创建可伸缩、可靠且安全的应用。EJB可在不同的J2EE兼容服务器和...
编程结构分为Model1和Model2两种模型,其中Model1将业务逻辑与展示逻辑混合在JSP页面中,而Model2则将业务逻辑封装在Servlet中,使用MVC(Model-View-Controller)设计模式分离展示逻辑和业务逻辑,提高了代码的可...
这两种技术与网络连接相关,分别指代一种特定的无线通信标准和无线网络技术。法院系统可能会利用这些无线技术来支持移动设备接入和提高数据传输速率。 考虑到内容识别不完整,以上知识点可能并不完整或存在误差,...
系统通常采用两种架构:客户机/服务器(C/S)架构和基于Web的浏览器/服务器(B/S)架构。 C/S架构的在线考试系统,试题存储在远程服务器上,考生需要在本地客户端安装专门的考试应用程序和数据库客户端。这种方式...
Java作为一种跨平台的程序语言,其版本涵盖的范围较广,从定位于嵌入式系统应用的J2ME、定位于客户端程序应用的J2SE,到定位于服务器端程序应用的J2EE,Java应各种不同的需求均完整地提供了相关的解决方案。...