2010-06-15 50 views
2

我想通过Android中的DatagramSocket通信两个模拟器。它们中的每一个都是P2P系统中的一个节点。因此他们每个人都有一个服务器线程和客户端线程(根据GUI事件创建)。这是我如何创建服务器互连模拟器实例Android

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."); 

一些额外的信息。节点1(仿真器A)在端口8000上有一个服务器,节点2(仿真器B)在端口8001上有一个服务器。“客户端部分”的目标端口被正确读取。试图做的是设置重定向,因此:

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

但是我无法获得任何通信beetwen这些2模拟器。据我了解的Android教程应该这样工作redir add tcp:localhostPort:emulatorPort。我坚持:/。任何人都可以指出我的错误或给出一些好的建议。对于我在单个设备(伪造其他节点的客户端)上测试通信时记录的所有内容,所以我认为代码中没有错误。

Btw是否有人知道如何获得2套模拟器(logA,logB)的日志?它会帮助我很多。

@Fred Grott 是的我已经通过telnet连接到每个模拟器。 Thx与日志的提示。

+1

您是否在redir之前首先执行telnet localhost consoleport? – 2010-06-15 22:08:51

+0

日志将模拟器上的日志文件推出/拉出 – 2010-06-15 22:09:49

回答

1

Datagram Sockets使用UDP。端口重定向您声明您设置的是TCP。如果你尝试:

redir add udp:localhostPort:emulatorPort 

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

相关问题