关于如何获取项目所部署的本机IP和端口的问题

  今天在写一个需求的时候碰到一个不常见的问题,在没有继承或者实现服务器提供的接口或者实现类的时候,比如说部署在tomacat上,某个类不去继承servelt接口或者继承Httpservelet抽象类的时候去或者项目所处的IP地址以及

项目所部署的端口号。

  我们先说一下我们都知道的情况,继承或者实现上面两者的情况下如何获取

方法一:

req.getLocalAddr(); 获取本机的IP地址(客户端)

req.getLocalPort(); 获取项目部署的端口号(客户端)

  那么在没有继承上面两者的情况下,通过何种方式获取呢?

方法二:

先上代码再解释:

获取本机的IP地址的代码

 public static InetAddress getCurrentIp() {
try {
// 得到当前机器上在局域网内所有的网络接口
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
// 遍历所有的网络接口
while (networkInterfaces.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
// 获取当前接口下绑定到该网卡的所有的 IP地址。
Enumeration<InetAddress> nias = ni.getInetAddresses();
while (nias.hasMoreElements()) {
InetAddress ia = (InetAddress) nias.nextElement();
// 获取网卡接口地址(ip)
String hostAddress = ia.getHostAddress();
System.out.println(hostAddress);
// 只需要ipv4地址 排除ipv6地址和127.0.0.1 取ipv4地址
if (!ia.isLinkLocalAddress() && !ia.isLoopbackAddress() && ia instanceof Inet4Address) {
return ia;
}
}
}
} catch (SocketException e) {
}
return null;
}

获取服务器的端口号

  public static String getLocalPort() throws MalformedObjectNameException {
// 获取所有注册在jvm中的服务器
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
System.out.println(objectNames);
String port = objectNames.iterator().next().getKeyProperty("port");
return port;
}

上面用到的包,都是java.net.*下的包,是jdk 中自带的包,已经提供在环境中,不需要额外的引入其他的包, Java 在 JDK1.4 之后引入了网络操作的相关包,所以需要JDK1.4或者1.4以上才行。

由于我用的Tomact服务器开发的,暂时没有测其他的服务器是否也同样可以,如果以后用到其他服务器再补充。

关于如何获取项目所部署的本机IP和端口的问题的更多相关文章

  1. <转>使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    准备 今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2 ...

  2. cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2d-x ...

  3. 获取WIFI的SSID和本机IP

    1.获取WIFI的SSID 引入库 #import <SystemConfiguration/CaptiveNetwork.h> ..... ..... // WIFI的名字 + (NSS ...

  4. 【Azure 云服务】如何从Azure Cloud Service中获取项目的部署文件

    问题描述 在历史已经部署的云服务(Azure Cloud Service)中,如何获取到项目在很久以前的部署包文件呢? 解决办法 1)如果部署云服务是通过门户上传部署包到存储账号中,则可以直接从存储账 ...

  5. tomcat修改默认主页, 前段项目放到tomcat下,浏览器输入ip加端口后,直接到项目主页

    1,将 项目 放到 tomcat 的webapps 文件夹下 2, 修改conf 下的 server.xml , 找到 <Host name="localhost" appB ...

  6. java获取windows和linux下本机ip通用方法

    public InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketE ...

  7. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址

    在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址. (一)主要的步骤: 在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取 ...

  8. Weblogic部署web项目代码中获取项目名为null的问题

    写在前面 这个问题之前遇到一次, 时间久就忘了, 还是好记性不如烂笔头, 记一下吧.Windows下部署到Tomcat和Linux下部署到Weblogic的获取项目名写法. 关键代码 java代码 w ...

  9. Weblogic部署web项目获取项目根目录为null

    写在前面 图片上传功能, web项目部署在本地Tomcat上并没有问题, 但是打成war包部署到Linux服务器Weblogic下却出现如题问题, 导致图片上传失败. 问题代码 String real ...

随机推荐

  1. sqlserver 行转列、字符串行转列、自动生产行转列脚本

    行转列,老生常谈的问题.这里总结一下网上的方法. 1.生成测试数据: CREATE TABLE human( name ), --姓名 norm ), --指标 score INT , --分数 gr ...

  2. Java面试题_第二阶段(Servlet、HTTP、Session、JSP、 Ajax、Filter、JDBC、Mysql、Spring)

    1.1. 描述Servlet调用过程? 答案: (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址. (2)浏览器根据 ...

  3. Xshell 连接 VirtualBox

    VirtualBox设置端口转发 Xshell 新建会话 连接成功

  4. C语言笔记 01_介绍&环境设置&编译执行

    前言 我是作为一个前端开发者入的编程世界,经过时间的推移,我发现对于编程底层的一些东西一点都不了解,只拘泥于表面,所以想尝试学习C语言然后进一步了解底层机制. 介绍 C 语言是一种通用的.面向过程式的 ...

  5. 12-19 js

    js是一个脚本语言  可插入到HTML网页文件中 在浏览器中执行 1 如何插入到网页中 1. 内部穿插 script 标签 type属性在网页中使用 2. 外部引入 script src属性引用js文 ...

  6. Privacy Violation 侵犯隐私

  7. JPA中实现单向多对一的关联关系

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  8. C lang: Compound literal

    Xx_Introduction C99 stantard. Upate array and struct a compound literal. Literal is date type value. ...

  9. 工具-Xmind常用快捷键/使用

    1-快捷键 Ctrl+Shift+L 快捷键助手 Ctrl+Home 返回中心主题 Ctrl+] 插入摘要 Ctrl+I 插入图片 Ctrl+Shift+H 插入超链接 Ctrl+1,2,3,4,5, ...

  10. Linux(Centos7)下redis5集群搭建和使用

    1.简要说明 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂 ...