Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android多播接收器仅适用于小数据包_Java_Android_Sockets_Networking_Multicast - Fatal编程技术网

Java Android多播接收器仅适用于小数据包

Java Android多播接收器仅适用于小数据包,java,android,sockets,networking,multicast,Java,Android,Sockets,Networking,Multicast,我正试图用我的android应用程序在本地网络上接收多播数据包。变送器在两种不同的数据模式下工作 在这两种模式中,数据每半秒传输一次 在一种模式中,输出数据包约为2675字节。在这种模式下,我接收100%的传输数据包 在另一种模式中,输出分组约为50216字节。在这种模式下,我很少收到数据包(大约98%的数据包丢失) 对于同一网络上的Linux PC,我运行python脚本来接收多播,它在两种模式下都接收100%的数据包。这意味着问题是我的android设备的本地问题,而不是网络问题 有人能提出

我正试图用我的android应用程序在本地网络上接收多播数据包。变送器在两种不同的数据模式下工作

在这两种模式中,数据每半秒传输一次

在一种模式中,输出数据包约为2675字节。在这种模式下,我接收100%的传输数据包

在另一种模式中,输出分组约为50216字节。在这种模式下,我很少收到数据包(大约98%的数据包丢失)

对于同一网络上的Linux PC,我运行python脚本来接收多播,它在两种模式下都接收100%的数据包。这意味着问题是我的android设备的本地问题,而不是网络问题

有人能提出这个问题的原因和解决办法吗?我的代码的相关部分如下:

@Override
public void onResume() {
    super.onResume();

    new Thread(new MulticastRx()).start();
}

class MulticastRx implements Runnable {
    @Override
    public void run() {
        try {
            final WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            final String multicastLockName = "MY_LOCK";
            WifiManager.MulticastLock multicastLock = null;
            if (wifiManager != null) {
                multicastLock = wifiManager.createMulticastLock(multicastLockName);
                multicastLock.setReferenceCounted(true);
                multicastLock.acquire();
            } else {
                Log.e("TEST", "LOCK FAILED");
            }
            byte[] recvBuf = new byte[65536];
            int port = 11000;
            InetAddress group = InetAddress.getByName("224.0.0.1");
            MulticastSocket multicastSocket = new MulticastSocket(port);
            multicastSocket.joinGroup(group);
            Log.d("TEST", "Staring RX Loop");
            while (multicastLock!=null && multicastLock.isHeld()) {
                DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
                multicastSocket.setSoTimeout(10000);
                try {
                    multicastSocket.receive(packet);
                    mTimeOutDisplayed = false;
                    String senderIP = packet.getAddress().getHostAddress();
                    Log.d("TEST", "SENDER:" + senderIP + " -> " +
                            "Multicast:/" + group + ":" + String.valueOf(port) +
                            " [" + String.valueOf(packet.getLength()) + "]"
                    );
                } catch (SocketTimeoutException e) {
                    if (!mTimeOutDisplayed) {
                        Log.w("TEST", "SocketTimeoutExceptions: " + group);
                        mTimeOutDisplayed = true;
                    }
                }
            }
            Log.e("TEST", "Lost Lock");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}