问题描述
我正在开发用于文本和数据传输的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 (将#修改为@)