java - 从ESP-32起,即使使用MulticastLock,Android也无法接收UDP广播

标签 java android udp broadcast

我无法接收UDP广播数据包,AsyncTask卡在了receive(packet)方法上(或者设置了超时)。

设置MulticastLock之后,我正在调用UdpTransmission:

 @Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.toolbar);

    setSupportActionBar(toolbar);

    WifiManager wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    assert wifi != null;
    WifiManager.MulticastLock wifiLock = wifi.createMulticastLock("ABC");
    wifiLock.acquire();

    UdpTransmission udpTransmission = new UdpTransmission();

    udpTransmission.execute();


(...)

这是UdpTransmission类:

package com.example.tcc.tcpconn;

import android.os.AsyncTask;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpTransmission extends AsyncTask<Void, Void, Void>
{
    public UdpTransmission()
    {

    }

    @Override
    protected Void doInBackground(Void ... voids)
    {
        byte[] packet = new byte[32];
        DatagramPacket dp = new DatagramPacket(packet, packet.length);

        try(DatagramSocket ds = new DatagramSocket(49153))
        {
            ds.setBroadcast(true);

//            ds.setSoTimeout(500);

            String rcvd = Arrays.toString(packet);
        }

        catch(Exception e)
        {
            e.printStackTrace();
        }

        return null;
    }
}


manifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />


WireShark屏幕截图:

wireshark_screenshot

我想念什么吗?任何帮助,将不胜感激!

最佳答案

实际上,如果我插入电话(Xperia XA1 Plus),它就可以工作。但是不是模拟器,这很奇怪...

关于java - 从ESP-32起,即使使用MulticastLock,Android也无法接收UDP广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61199597/

相关文章:

java - Spring Data Rest 是否支持 Spring Data 的表达式运算符,例如。之间,大于?

java - 哈希码冲突会影响 Java 中的 equals 吗?

java - 扫描大量文件几十个字

java - Enum 在 android/java 中与 .setText 一起使用

安卓键禁用

networking - 使用 UDP 从 Memcached 中获取数据时丢包

java - 当我不知道文件类型时,我应该使用哪个阅读类?

sql - Android 数据搜索

c++ - 将udp数据包发送到本地局域网很奇怪

node.js - udp(4) 和 udp(6) 有什么区别?