Android mDNS在移动热点上广播

问题描述

我正在开发用于文本和数据传输的P2P应用程序。我正在使用jReto,因为它似乎是一个方便的库,并且与将来用于iOS开发的sReto兼容。但是,它似乎几乎被遗弃,并且必须解决一些问题。 它基于jmDNS,一个问题是错误地使用了多播创建启动器。我是这样修复的:

            this.bonjourBrowser = JmDNS.create(deviceIpAddress,"RetoWlanBrowser");

这使得通过路由器的P2P连接可以正常工作,但是如果一个对等点是热点,那么它将无法正常工作。一个星期以来,这就是我被困的地方: 我似乎没有将任何多播传送到热点对等点,但是,客户端对等点收到了该多点传送,但是连接失败。我认为这是一个具有约束力的问题,因此在这里(Multicast Support on Android in Hotspot/Tethering mode)找到了解决方案,并添加:

        MulticastSocket multicastSocket = new MulticastSocket();

        /* Set NetworkInterface of MultiCast Socket */
        if (intf != null) multicastSocket.setNetworkInterface(intf);

但是,它仍然不起作用,从我的阅读资料中我知道WifiManager甚至没有管理热点。此外,在上述解决方案中,似乎他们首先使用WifiManager来锁定多播,然后再定义接口,这似乎是违反直觉的。

我还尝试通过使用以下功能将所有套接字通信绑定到wifi接口,该接口似乎在简单的套接字通信(Bind all client sockets to wifi interface)中起作用:

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void bindNetworkInterface() {
    NetworkRequest.Builder requestBuilder = new NetworkRequest.Builder();
    requestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        cm.requestNetwork(requestBuilder.build(),new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(Network network) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    cm.bindProcessToNetwork(network);
                }
            }

            @Override
            public void onUnavailable() {
                super.onUnavailable();
            }
        });
    }
}

不幸的是,它仍然没有收到任何演员表,我也无法连接到热点对等点。我还尝试了LocalOnlyHotspot来查看它是否有所不同,但没有。我想知道套接字绑定是否不包含zeroconf路由,或者是否仅适用于常规wifi连接或热点wifi?还是有一个我还没有考虑过的完全不同的问题?任何帮助表示赞赏!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...