Смотрите здесь :
Доступ к хост-машине возможен по IP-адресу 10.0.2.2
из эмулятора.
** отредактируйте, ответьте на свой комментарий: *
Для полноты и лучшего понимания моего ответа прочитайте документацию Эмулятор Android .
Это IP-адреса , полученные с эмулятора :
10.0.2.1
, адрес маршрутизатора / шлюза.
10.0.2.2
, Специальный псевдоним вашего хоста петлевой интерфейс (т. Е. 127.0.0.1 на вашем компьютере разработчика)
10.0.2.3
, первый DNS-сервер
10.0.2.4
/ 10.0.2.5
/ 10.0.2.6
, необязательный второй, третий и четвертый DNS-сервер (если есть)
10.0.2.15
, эмулируется собственное устройство интерфейс сети / Ethernet
127.0.0.1
, эмулируется собственный прибор интерфейс обратной связи
Тем не менее, у нас есть:
- Распространенная ошибка 1: доступ к
127.0.0.1
из эмулятора при попытке дозвониться до хост-компьютера. Используйте 10.0.2.2
, как я уже сказал.
- Распространенная ошибка 2: Попытка получить доступ к службе эмулятора на
HostComputerIP:appServicePort
. Он не будет работать, так как на вашем главном компьютере (Windows, Linux, OS и т. Д.) Не работает служба в этом порту. Вам нужно перенаправить порт на эмуляторе console на порт на эмулируемом экземпляре Android (см. 2 ниже).
Общие сетевые потребности:
1 - приложение эмулятора в качестве клиента и локальный компьютер в качестве сервера
Поскольку эмулятор NAT, я считаю, что вы можете подключиться к любому компьютеру в вашей локальной сети напрямую. Я имею в виду, поскольку виртуальный маршрутизатор *1081* имеет доступ к обеим сетям, он должен уметь обрабатывать исходящие (то есть, эмулятор-> реальная локальная сеть) соединения просто отлично.
Пример: в моей сети (192.168.0.x), я могу подключить из эмулятора к моему real маршрутизатору (192.168.0.254
) просто указывая веб-браузер эмулятора на http://192.168.0.254:port
. Я использую различные сервисы (привет Tomato!), И я могу получить доступ ко всем из них на каждом port
. Нет необходимости обрабатывать переадресацию портов, как ожидалось .
Судя по вашему коду, вам нужно:
// I assume 192.168.0.114 is your server, which is
// located on your local network, running a server application
// on port 9999.
cSocket = new Socket("192.168.0.114",9999);
2- Локальный компьютер в качестве клиента и приложение эмулятора в качестве сервера
Теперь это другая история. Вам необходимо настроить перенаправления портов на виртуальном маршрутизаторе. Самый простой способ:
Telnet в систему управления (это не эмулятор) с вашего хоста (ваш компьютер, консоль в Linux или командная строка в Windows):
telnet localhost 5554
После этого используйте:
adb forward tcp:localPort tcp:emulatorPort
После этого вы сможете использовать службу на emulatorPort
и подключиться к ней с компьютеров в локальной сети, открыв hostComputerIP:localPort
.
Так люди (включая меня) используют, например, SSHDroid внутри эмулятора.
Что-нибудь еще?