Соединение Эмулятор Экземпляры Android - PullRequest
2 голосов
/ 15 июня 2010

Я хочу связать два эмулятора через DatagramSocket в Android.Каждый из них является узлом в системе P2P.Таким образом, у каждого из них есть серверный поток и клиентский поток (созданный для каждого события графического интерфейса).Вот как я создаю сервер

public static final String SERVERIP = "10.0.2.15";
    //...
    run() {
                InetAddress serverAddr = InetAddress.getByName(SERVERIP);
                DatagramSocket socket = new DatagramSocket(SERVERPORT,serverAddr);
                while(true) {
                    byte[] buf = new byte[29];
                    DatagramPacket packet = new DatagramPacket(buf, buf.length);
                    socket.receive(packet);
                //... 
                }
     }

Порт предоставляется пользователем во время инициализации приложения.Клиентская часть (запрашивает некоторые данные)

InetAddress serverAddr = InetAddress.getByName("10.0.2.2");
//...
Log.i("Requester", "Trying to connect to device port = "+target);
DatagramSocket socketJ = new DatagramSocket();
byte[] bufJ = Adaptor.createStringMsg(Adaptor.createJoingMsg(id, Location.getX(), Location.getY())).getBytes();             
DatagramPacket packetJ = new DatagramPacket(bufJ, bufJ.length, serverAddr, target);
Log.i("Requester", "Sending: '" + new String(bufJ) + "'");
socketJ.send(packetJ);
Log.i("Requester", "Done.");

Некоторая дополнительная информация.Node1 (emulatorA) имеет сервер на порту 8000, а Node2 (emulatorB) имеет сервер на порту 8001. Целевой порт для «клиентской части» читается правильно.То, что я пытался сделать, это установить перенаправление следующим образом:

//emulatorA
redir add tcp:8000:8000
//emulatorB
redir add tcp:8001:8001

Однако я не могу получить никакой связи между этими двумя эмуляторами.Насколько я понял, учебник по Android об этом должен работать так: redir add tcp:localhostPort:emulatorPort.Я застрял с этим: /.Может кто-нибудь указать мне на ошибку или дать хороший совет.Для записи, пока я тестировал связь на одном устройстве (клиент подделывал другой узел), все работало, поэтому я не думаю, что в коде есть ошибка.

Кстати, кто-нибудь знает, как я могу получить 2 набора журналов для этих 2 эмуляторов (logA, logB)?Это мне очень поможет.

@ Фред Гротт Да, я подключился через telnet к каждому эмулятору.Спасибо за отзыв с журналами.

1 Ответ

1 голос
/ 18 августа 2010

Дейтаграммные сокеты используют UDP. Перенаправления портов, которые вы указали, настроены для TCP. Если вы попробуете:

redir add udp:localhostPort:emulatorPort

Возможно, тебе повезет больше. Однако, если вы измените свою реализацию на использование сокетов и будете общаться через потоки, это тоже будет работать.

...