关于如何获取项目所部署的本机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. Winform中实现自定义屏保效果(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建form ...

  2. Scrcpy用电脑控制Android手机(支持Windows/macOS/Linux)

    一.scrcpy简介 注意:拼写是scrcpy,非Python爬虫框架Scrapy. scrcpy可以通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备.它可以通过U ...

  3. python中time.strftime不支持中文,报错UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: encoding error

    使用time.strftime将 "2020-10-10 10:10:10" 转化为  2020年10月10日10时10分10 报错: import time timestr=&q ...

  4. 这7个npm命令将帮助您节省时间

    作为JavaScript开发人员,NPM是我们一直使用的东西,并且我们的脚本在终端上连续运行. 如果我们可以节省一些时间呢? 1.直接从npm打开文档 如果我们可以直接使用npm跳转到软件包的文档怎么 ...

  5. Chrome是老大,Firefox 是老二,Edge 不是老三

    NetMarketShare 是全球最大的电子消费市场调研机构,根据 NetMarketShare 提供的统计数据显示,来自七月份的报告,谷歌的 Chrome 在全球台式浏览器排名上仍居榜首,该公司保 ...

  6. Android TeaPickerView数据级联选择器

    数据级联选择器.三级联动.二级联动.层级联动.多数据筛选.必藏 (Data Cascade Selector, Hierarchical Structure, Multiple Data Screen ...

  7. KVO-键值监听

    键值监听,就是可以监听对象某个属性值的变化: 首先,在工程中,新建一个Person的类 @interface Person : NSObject @property (nonatomic, copy) ...

  8. react学习之弹出层

    react的弹出层不同于以往的DOM编程,我们知道,在DOM中,弹出层事件绑定在对应的节点上即可,但是在react中,往往只能实现父子之间的传递控制,显然,弹出层的层级不符合此关系. 在这里我们需要使 ...

  9. NFS挂载遇到的问题

    问题描述:生产环境中需要经常运用NFS挂载,就在测试环境中测试一下,将服务器中192.168.1.4 /u01/app/oracle/product/11.2.0/dbhome_1/dbs  挂载到1 ...

  10. make:yacc/lex:command not be found

    1.使用./build编译boa-0.94.13时出现make:yacc:command not be found 解决方法:apt-get install -y byacc 2.出现make:lex ...