關於如何獲取項目所部署的本機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服務器開發的,暫時沒有測其他的服務器是否也同樣可以,如果以后用到其他服務器再補充。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM