如何解决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 举报,一经查实,本站将立刻删除。