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

2019-10-31 16:04:46来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

关于如何获取项目所部署的本机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服务器开发的,暂时没有测其他的服务器是否也同样可以,如果以后用到其他服务器再补充。

 


原文链接:https://www.cnblogs.com/zyfBlogShare/p/11772513.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:String

下一篇:微服务架构 ------ 插曲 Mybatis逆向工程