JCIFS, Android и getbyname

Ну, попробовал следующий кусок кода:

import jcifs.netbios.NbtAddress;
...

              try{
                  NbtAddress addr = NbtAddress.getByName("Base");
              }catch (UnknownHostException e){}
...

И это бросает это исключение. Есть идеи? Я попробовал это с парой названных машин в локальной сети

3 ответа

Решение

Я использовал эмулятор. Когда я запустил приложение на реальном оборудовании, проблема исчезла.

Проблема заключается в том, что разрешение имен NBT работает путем отправки широковещательных пакетов UDP по локальной сети, а эмулятор живет в собственной виртуальной локальной сети, подключенной к вашему хост-компьютеру только через виртуальный маршрутизатор NAT. Широковещательные пакеты не пересекаются между различными подсетями, поэтому ничего в вашей локальной сети не видит запрос имени.

У меня та же проблема. Единственные идеи для его решения, которые я знаю:

  • Настройте сервер WINS в локальной сети и укажите на него свое приложение с помощью свойства jcifs.netbios.wins,

или же,

  • Создайте файл LMHOSTS в файловой системе эмулятора, содержащий имена и IP-адреса хостов в вашей локальной сети, к которым вы хотите иметь доступ, и укажите в нем свое приложение с помощью свойства jcifs.netbios.lmhosts.

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

Решение LMHOSTS не идеально, потому что вы (AFAIK) не можете просматривать рабочие группы и хосты. Это должно работать с сервером WINS, но я не пробовал.

Я полагаю, у вас нет разрешения ИНТЕРНЕТ в вашем манифесте?

Другие вопросы по тегам