关于如何获取项目所部署的本机IP和端口的问题
今天在写一个需求的时候碰到一个不常见的问题,在没有继承或者实现服务器提供的接口或者实现类的时候,比如说部署在tomacat上,某个类不去继承servelt接口或者继承Httpservelet抽象类的时候去或者项目所处的IP地址以及
项目所部署的端口号。
我们先说一下我们都知道的情况,继承或者实现上面两者的情况下如何获取
方法一:
req.getLocalAddr(); 获取本机的IP地址(客户端)
req.getLocalPort(); 获取项目部署的端口号(客户端)
那么在没有继承上面两者的情况下,通过何种方式获取呢?
方法二:
先上代码再解释:
获取本机的IP地址的代码
1 public staticInetAddress getCurrentIp() {2 try{3 //得到当前机器上在局域网内所有的网络接口
4 Enumeration networkInterfaces =NetworkInterface.getNetworkInterfaces();5 //遍历所有的网络接口
6 while(networkInterfaces.hasMoreElements()) {7 NetworkInterface ni =(NetworkInterface) networkInterfaces.nextElement();8 //获取当前接口下绑定到该网卡的所有的 IP地址。
9 Enumeration 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 instanceofInet4Address) {17 returnia;18 }19 }20 }21 } catch(SocketException e) {22 }
23 return null;24 }
获取服务器的端口号
1 public static String getLocalPort() throwsMalformedObjectNameException {2 //获取所有注册在jvm中的服务器
3 MBeanServer beanServer =ManagementFactory.getPlatformMBeanServer();4 Set 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 returnport;9 }
上面用到的包,都是java.net.*下的包,是jdk 中自带的包,已经提供在环境中,不需要额外的引入其他的包, Java 在 JDK1.4 之后引入了网络操作的相关包,所以需要JDK1.4或者1.4以上才行。
由于我用的Tomact服务器开发的,暂时没有测其他的服务器是否也同样可以,如果以后用到其他服务器再补充。