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

  • 相关阅读:
    USACO 2016 February Contest, Gold解题报告
    USACO 2016 January Contest, Gold解题报告
    NOIP2013 Day2
    [DP题]放苹果
    [DP题]登山
    洛谷八连测R6
    [20171025模拟赛]
    [DP题]吃糖果
    [DP题]采药
    spring-security-oauth2 授权服务集成钉钉扫码登录
  • 原文地址:https://www.cnblogs.com/zyfBlogShare/p/11772513.html
Copyright © 2020-2023  润新知