2010-06-15 26 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 

你可能有更好的運氣。 但是,如果您更改您的實現以使用套接字並通過可以工作的流進行通信。

相關問題