Разъемное соединение между двумя эмуляторами - PullRequest
0 голосов
/ 13 января 2020

Я хочу соединить два эмулятора Android (оба работают на одном хосте) с сокетами.

У меня есть сервер, работающий на одном из них и прослушивающий порт 7000 на внешнем IP-адресе:

        InetAddress addr = InetAddress.getByName("10.0.2.15");
        ServerSocket serverSocket = new ServerSocket(7000, 50, addr);
        try {
            sock = serverSocket.accept();
        } finally {
            serverSocket.close();
        }

и клиент на другом эмуляторе на том же хосте, подключающемся к этому порту:

         socket = new Socket();
         socket.bind(new InetSocketAddress("10.0.2.15", 6666));
         socket.connect(new InetSocketAddress("10.0.2.2", 7000));

Я привязал клиента к порту 6666, чтобы я мог сделать порт adb необходимо переадресация:

         (host) .\adb.exe forward --list
         emulator-5554 tcp:7000 tcp:7000
         emulator-5556 tcp:6666 tcp:6666

С помощью отладчика я вижу, что клиентский сокет находится в состоянии «соединения», но при вызове:

        dataInputStream = new DataInputStream(socket.getInputStream());
        dataInputStream.available(); // this throws IOException Broken Pipe

выдается IOException для Broken Pipe.

Есть идеи, где проблема?

1 Ответ

0 голосов
/ 13 января 2020

Использование redir вместо adb forward , кажется, решает проблему.

На эмуляторе сервера

telnet locahost 5554
redir add tcp:7000:7000

На эмуляторе клиента

telnet localhost 5556
redir add tcp:6666:6666

Я не очень понимаю, почему есть разница, поскольку документация гласит:

" Android Debug Bridge (adb ) обеспечивает переадресацию портов, альтернативный способ настройки перенаправления сети."

...