Использование InetAddress для сбора сетевых интерфейсов

#java #networking

#java #сеть

Вопрос:

Я использовал InetAddress как массив. Однако, если я не использую array, я могу распечатать каждый сетевой интерфейс в цикле. Хотя я повторяю массив InetAddress, код ничего не показывает. Есть ли фундаментальная проблема? Я очень новичок в мире сетей на Java.

 import java.io.*;
import java.net.*;
import java.util.*;
public class Interface_Enumeration_Concept {
   InetAddress[] address;
   public void GetInterfaces(){
    try {
        Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface intf = (NetworkInterface) interfaces.nextElement();
            Enumeration addresses = intf.getInetAddresses();
            int i=0;
            while (addresses.hasMoreElements()){
                address[i] = (InetAddress) addresses.nextElement();
                System.out.println(address[i]);
                i  ;
            }
        }
    }catch(SocketException exp){
        exp.getCause();
    }
}
public static void main(String[] args) {
    Interface_Enumeration_Concept objects = new Interface_Enumeration_Concept();
    objects.GetInterfaces();
}
  

}

Ответ №1:

SocketException Происходит. Вы не печатаете его и ничего с ним не делаете, поэтому впоследствии ничего не происходит, и вы его не видите. Если вместо exp.getCause() (который ничего не делает) вы сделаете что-то вроде exp.printStackTrace() , вы увидите проблему.

Комментарии:

1. И когда вы это исправите, вы получите a, NullPointerException потому что вы не инициализировали address .

2. Да, у меня нет. В книге Питта «Основы сетевого взаимодействия на Java». Он не инициализировал InetAddress своим конструктором . Просто объявил его и ввел значение. это сработало