Android中的多播接收机

Android中的多播接收机,android,Android,我尝试通过多播接收数据报。 我尝试使用Java,如下所示: class looperThread extends Thread { public void run() { try { byte[] buffer = new byte[140]; int port = 24680; String address = "224.0.0.10"; try {

我尝试通过多播接收数据报。 我尝试使用Java,如下所示:

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()

事实上,它发送几个数据报。 但它只接收一个或部分数据报。 在Java代码中,它接收所有。
我应该如何改进?

我认为这可能是无线不稳定造成的。 您应该尝试将新AP更改为测试。
您的Android手机的网络接口控制器可能与AP冲突。

试图排除其他问题。您的java客户端是否也无线连接到同一个无线接入点?我尝试将java客户端连接到同一个AP,它仍然接收到比Android客户端更多的数据。我使用wireshark进行监控。Java客户机接收所有数据报。但Android客户端并非如此。
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);
        }
    }
}