互连仿真器实例Android

时间:2010-06-15 06:32:13

标签: android communication emulation

我想通过Android中的DatagramSocket通信两个模拟器。它们中的每一个都是P2P系统中的节点。因此,它们中的每一个都有一个服务器线程和客户端线程(根据GUI事件创建)。这就是我创建服务器的方式

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一样工作。我坚持不懈:/。任何人都可以指出我的错误或给出一些好的建议。为了记录我在单个设备上测试通信(客户端伪造其他节点)一切正常,所以我认为代码中没有错误。

顺便说一句任何人都知道如何为这两个模拟器(logA,logB)获取2组日志?这对我有很大帮助。

@Fred Grott 是的,我通过telnet连接到每个模拟器。对于带有日志的提示而言。

1 个答案:

答案 0 :(得分:1)

数据报套接字使用UDP。端口重定向您已声明您设置的是TCP。如果您尝试:

redir add udp:localhostPort:emulatorPort

你可能会有更好的运气。 但是,如果您将实现更改为使用套接字并通过也可以工作的流进行通信。