关于如何获取项目所部署的本机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