2011-12-27 38 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发生冲突。