2011-12-27 39 views
0

我試圖通過多播接收數據報。 我嘗試使用Java如下:Android中的多播接收器

class looperThread extends Thread { 
    public void run() { 
     try { 
      byte[] buffer = new byte[140]; 
      int port = 24680; 
      String address = "224.0.0.10"; 
      try { 
       socket = new MulticastSocket(port); 
       InetAddress add = InetAddress.getByName(address); 
       socket.joinGroup(add); 
       while (true) { 
        try { 
         DatagramPacket packet = new DatagramPacket(buffer, buffer.length, add, port); 
         socket.receive(packet); 
         area.append("Received from " + packet.getAddress().toString() + "\n"); 
        } catch (UnknownHostException ue) { 
        } 
       } 
      } catch (java.net.BindException b) { 
      } 
     } catch (IOException e) { 
      System.err.println(e); 
     } 
    } 
} 

它的工作原理。 但我將代碼修改爲Android,如下所示。 下面就onCreate()

Thread mClockThread = new looperThread(); 
mClockThread.start(); 

class looperThread extends Thread { 
    @Override 
    public void run() { 
     WifiManager wifi = (WifiManager) getSystemService(getApplicationContext().WIFI_SERVICE); 
     MulticastLock mLock = wifi.createMulticastLock("mylock"); 
     mLock.acquire(); 
     try { 
      byte[] buffer = new byte[140]; 
      int port = 24680; 
      String address = "224.0.0.10"; 
      try { 
       MulticastSocket socket = new MulticastSocket(port); 
       InetAddress add = InetAddress.getByName(address); 
       socket.joinGroup(add); 
       while (true) { 
        try { 
         DatagramPacket packet = new DatagramPacket(buffer, buffer.length, add, port); 
         socket.receive(packet); 
         System.out.println("Received from " + packet.getAddress().toString() + "\n"); 
        } catch (UnknownHostException ue) { 
        } 
       } 
      } catch (java.net.BindException b) { 
      } 
     } catch (IOException e) { 
      System.err.println(e); 
     } 
    } 
} 

事實上,它發送多個數據包。 但它只接收一個或部分數據報。 而在Java代碼中,它收到全部。 我該如何改進?

+0

試圖排除其他問題。 您的java客戶端是否以無線方式連接到同一無線接入點? – rjt 2011-12-27 08:17:20

+0

我嘗試連接到同一個AP的Java客戶端,它仍然收到比Android客戶端更多的東西。 – brian 2011-12-27 09:18:32

+0

我使用wireshark進行監控。 Java客戶端接收所有數據報。但Android客戶端不是。 – brian 2011-12-27 09:22:46

回答

1

我認爲這可能是由不穩定的無線造成的。 您應該嘗試更換新的AP進行測試。 它可能是您的Android手機的網絡接口控制器與AP發生衝突。