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, но я не пробовал.