2016-09-05 3 views
1

У меня возникли проблемы с возвратом правильного IP-адреса после установки виртуального бокса oracle. Он печатает мне следующее:Virtualbox, конфликтующий с получением ip

VirtualBox Host-Only Ethernet Adapter 192.168.56.1 
VirtualBox Host-Only Ethernet Adapter fe30:0:0:0:1323:fahd:bt75:8422%eth1 
Microsoft Teredo Tunneling Adapter 2041:0:91q8:6at8:30he:3r2c:3a53:ff4c 
Microsoft Teredo Tunneling Adapter fj80:0:0:0:32bn:1e2z:3f37:ff5c%net4 
Realtek PCIe GBE Family Controller 192.168.0.163 
Realtek PCIe GBE Family Controller fe30:0:0:0:3a4c:bf90:232a:a324%eth6 

Я только хочу, чтобы вернуть 192.168.0.163

Я использовал этот код, чтобы получить IP-адрес:

String ip; 
      try { 
       Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); 
       while (interfaces.hasMoreElements()) { 
        NetworkInterface iface = interfaces.nextElement(); 
        // filters out 127.0.0.1 and inactive interfaces 
        if (iface.isLoopback() || !iface.isUp()) 
         continue; 

        Enumeration<InetAddress> addresses = iface.getInetAddresses(); 
        while(addresses.hasMoreElements()) { 
         InetAddress addr = addresses.nextElement(); 
         ip = addr.getHostAddress(); 
         System.out.println(iface.getDisplayName() + " " + ip); 
        } 
       } 
      } catch (SocketException es) { 
       throw new RuntimeException(es); 
      } 

Как получить только разыскиваемый IP?

+0

* Почему * вы собираете все IP-адреса, адреса вашего компьютера? – Andreas

+0

@Andreas Мне нужно установить соединение с устройством, которому требуется вызов с ПК, чтобы получить IP. И да, мне нужно это в приложении Java. –

+0

Зачем вам нужен * собственный * адрес для подключения к устройству? Вам не нужен адрес * устройства *? Если у вас есть это, позвольте системе использовать таблицы маршрутизации для соединения. Тогда я верю, что вы всегда можете узнать, что такое адрес, но не зная, какой * вид * соединения вы устанавливаете, я не могу быть уверен. – Andreas

ответ

1

Для связи без IP-адреса лучший способ - либо через службу обнаружения, либо с широковещательными UDP-пакетами.

Вам понадобится несколько вещей:

  1. сервер прослушивание широковещательных пакетов либо на определенный порт, или вообще.
  2. Клиент (в данном случае ваше приложение для Android), которое прослушивает определенный порт для подключения (TCP/UDP зависит от потребностей ваших приложений).
  3. Клиент также должен будет иметь возможность отправлять широковещательный пакет в сети, идентифицирующей себя.

В основном шаги идут следующим образом:

  1. Сервер связывает порты, необходимые для UDP вещания получения.
  2. Клиент связывает порт для получения ответа от сервера (например, например, порт 16000)
  3. Затем клиент отправляет широковещательный пакет в сети, который отправляется всем клиентам.
  4. Сервер получает пакет и с информацией о пакетах получает IP-адрес клиента.
  5. Затем сервер отвечает клиенту через порт прослушивания (в данном случае 16000) через UDP или TCP.
  6. Как только соединение с клиентом установлено, клиент знает через информацию о соединении IP-адрес сервера, имеет активное соединение с ним и может потенциально сохранить адрес для последующего использования.

Технические детали могут быть найдены во всем стековом потоке, но варьируются в зависимости от языков программирования сервера/клиента и задействованных операционных систем.

Вот учебник по Oracle документации для Java: https://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html

Один для C#: https://msdn.microsoft.com/en-us/library/tst0kwb1(v=vs.110).aspx

+0

Это очень приятно, спасибо! Однако, насколько я понял из некоторых других тем - при тестировании обнаружения UDP с помощью эмулятора существует какая-то проблема с сетью между эмулятором и компьютером, на которой запущен эмулятор. Я не уверен, знаете ли вы, о чем я говорю? –

+0

Возможно, вам придется выполнить некоторую переадресацию портов в этом случае, если она находится на эмуляторе. – MiltoxBeyond

+0

Я понятия не имею, как, ха-ха. –