2011-09-18 19 views
2

我在PC上有一個非常簡單的繪製應用程序,它可以存儲點併爲每個點繪製一個橢圓。如何在Android上接收多播消息?

我想把這個發送到一個android應用程序,它將接收每個點的座標,然後繪製橢圓。

現在我正在使用多播套接字,但它似乎並沒有工作。我害怕我錯過了一些東西。

的InetAddress類和接口都在這兩個應用程序相同:234.235.236.237和9876

在我的PC應用程序的MulticastSocket時初始化代碼如下所示:

private void InitiateSocket() throws IOException 
{ 
    // Create a socket and start the communication 
socket = new MulticastSocket(port); 
iAddr = InetAddress.getByName("234.235.236.237"); 

    // Joins the multicastSocket group 
socket.joinGroup(iAddr); 
} 

而當我想送協調我把這種方法:

public void SendMessage(int x, int y) 
{ 

    //Translate message to bytes 
byte[] _data = (x+ " " + y).getBytes(); 

    //Create and send a packet 
DatagramPacket _packet = new DatagramPacket(_data, _data.length, iAddr, port); 

    try { 
     socket.send(_packet); 
     textArea.append(x + " " + y + " "); 
    } catch (IOException e) { 
     System.exit(0); 
    } 
} 

然後我的Android應用程序是這樣的:

WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
WifiManager.MulticastLock multicastLock = wm.createMulticastLock("mydebuginfo"); 
multicastLock.acquire(); 


//Create a socket and start the communication 
_socket = new MulticastSocket(_port); 

// Joins the multicastSocket group 
_socket.joinGroup(_iadr); 

// Add a new Client to the socket 
new Client(_socket, this); 

當我想發送一條消息我稱之爲,這是非常相似的一個在pc applikacation

private void SendMessage(String _s) 
{ 
    // Translate message to bytes 
    byte[] _data = (_name + ": "+ _s).getBytes(); 

    // Create and send a packet 
    DatagramPacket _packet = new DatagramPacket(_data, _data.length, _iadr, _port); 

    try { 
     _socket.send(_packet); 
    } catch (IOException e) { 
     _field.append(e.toString()); 
    } 
} 

然後在客戶端類偵聽與此代碼插座:

@Override 
public void run() { 

    byte[] _data = new byte[1024]; 
    while(true) 
    { 
     try 
     { 
      //Datagram for receiving 
      DatagramPacket packet = new DatagramPacket(_data, _data.length); 

      //Receive the packet, convert it and send it to the Activity class 
      _socket.receive(packet); 
      String _medd = new String(_data, 0 , packet.getLength()); 
      _csta.input = _medd; 
     } 
     catch(IOException e) 
     { 
      //Will break when the socket is closed 
      break; 
     } 
    } 
} 

事情是,我收到我自己的消息從Android應用程序發送,但我沒有收到從PC發送的消息。所以我猜測它與連接有關。

我在AndroidManifest中設置了android.permission.CHANGE_WIFI_MULTICAST_STATEandroid.permission.INTERNET

我希望我給出的信息就夠了。

我正在使用模擬器和android 2.2。

Off topic: 我真的不明白MulticastSockets是如何工作的,我該如何選擇D類IP和端口?

+0

我發現了一個code.google線程報告說,Android不支持MulticastSocket時,線程是老雖然,任何人都可以確認這是問題嗎? – Orujimaru

回答