码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-31 18:59:02      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:key   ipv6   current   需求   ESS   color   ext   项目部署   ipv4   

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

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

项目所部署的端口号。

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

       方法一:

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

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

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

    方法二: 

    先上代码再解释:

     获取本机的IP地址的代码

 1 public static InetAddress getCurrentIp() {
 2         try {
 3             // 得到当前机器上在局域网内所有的网络接口
 4             Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
 5             // 遍历所有的网络接口
 6             while (networkInterfaces.hasMoreElements()) {
 7                 NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
 8                 // 获取当前接口下绑定到该网卡的所有的 IP地址。
 9                 Enumeration<InetAddress> nias = ni.getInetAddresses();
10                 while (nias.hasMoreElements()) {
11                     InetAddress ia = (InetAddress) nias.nextElement();
12                     // 获取网卡接口地址(ip)
13                     String hostAddress = ia.getHostAddress();
14                     System.out.println(hostAddress);
15                     // 只需要ipv4地址 排除ipv6地址和127.0.0.1 取ipv4地址
16                     if (!ia.isLinkLocalAddress() && !ia.isLoopbackAddress() && ia instanceof Inet4Address) {
17                         return ia;
18                     }
19                 }
20             }
21         } catch (SocketException e) {
22         }
23         return null;
24     }

获取服务器的端口号

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

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

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

 

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

标签:key   ipv6   current   需求   ESS   color   ext   项目部署   ipv4   

原文地址:https://www.cnblogs.com/zyfBlogShare/p/11772513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!