移动数据开启时无法 ping 启动 LocalOnlyHotSpot 的设备
Not able to ping device which started the LocalOnlyHotSpot when mobile data is on
我正在使用 wifiManager.startLocalOnlyHotspot 在没有互联网访问权限的情况下启动热点,以便连接设备可以使用套接字将文件发送到此设备。一切都按预期工作,但当正在 ping 的同一设备的移动数据打开时,我无法 ping 连接的 wifi 热点设备。当我禁用移动数据时,我能够 ping 到 服务器 IP 我从实用程序 class 获得我正在发布该实用程序方法。任何人都可以向我解释我所缺少的概念吗?
public static String getHotspotIpAddress(Context context) {
WifiManager wifimanager = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
DhcpInfo dhcpInfo = wifimanager == null ? null : wifimanager.getDhcpInfo();
if (dhcpInfo != null) {
int address = dhcpInfo.serverAddress;
return ((address & 0xFF)
+ "." + ((address >> 8) & 0xFF)
+ "." + ((address >> 16) & 0xFF)
+ "." + ((address >> 24) & 0xFF));
}
return "";
}
您可以尝试为已连接的 wifi 热点设置默认网络,以便以后所有套接字都将仅使用此 wifi 网络创建。
val request = NetworkRequest.Builder()
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
connectivityManager.registerNetworkCallback(request.build(), object : NetworkCallback() {
override fun onAvailable(network: Network) {
currentNetwork = network
val success = ConnectivityManager.setProcessDefaultNetwork(network)
}
})
我正在使用 wifiManager.startLocalOnlyHotspot 在没有互联网访问权限的情况下启动热点,以便连接设备可以使用套接字将文件发送到此设备。一切都按预期工作,但当正在 ping 的同一设备的移动数据打开时,我无法 ping 连接的 wifi 热点设备。当我禁用移动数据时,我能够 ping 到 服务器 IP 我从实用程序 class 获得我正在发布该实用程序方法。任何人都可以向我解释我所缺少的概念吗?
public static String getHotspotIpAddress(Context context) {
WifiManager wifimanager = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
DhcpInfo dhcpInfo = wifimanager == null ? null : wifimanager.getDhcpInfo();
if (dhcpInfo != null) {
int address = dhcpInfo.serverAddress;
return ((address & 0xFF)
+ "." + ((address >> 8) & 0xFF)
+ "." + ((address >> 16) & 0xFF)
+ "." + ((address >> 24) & 0xFF));
}
return "";
}
您可以尝试为已连接的 wifi 热点设置默认网络,以便以后所有套接字都将仅使用此 wifi 网络创建。
val request = NetworkRequest.Builder()
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
connectivityManager.registerNetworkCallback(request.build(), object : NetworkCallback() {
override fun onAvailable(network: Network) {
currentNetwork = network
val success = ConnectivityManager.setProcessDefaultNetwork(network)
}
})