【问题标题】:System.Net.Sockets.SocketException (0x80004005): Network is unreachableSystem.Net.Sockets.SocketException (0x80004005):网络不可达
【发布时间】:2021-02-06 07:32:03
【问题描述】:

我的命令在较低版本的 Android 上可以正常工作,但是由于 WiFi Manager 在 Android 10 及更高版本中更改了配置命令,我的命令没有响应并出现错误,请帮助我!

connectivityManager Android 10:

WifiNetworkSuggestion guestUsers = new WifiNetworkSuggestion.Builder()
               .SetSsid("########")
               .SetWpa2Passphrase("#######")
               .Build();
            var suggestions = new[] { guestUsers };
            var status = wifiManager.AddNetworkSuggestions(suggestions);
var specifier = new WifiNetworkSpecifier.Builder()
                            .SetSsid("##########")
                            .SetWpa2Passphrase("###########")
                            .Build();
                    var request = new NetworkRequest.Builder()
                                        .AddTransportType(TransportType.Wifi) // we want WiFi
                                        .RemoveCapability(NetCapability.Internet) // Internet not required
                                        .SetNetworkSpecifier(specifier) // we want _our_ network
                                        .Build();
                    var connectivityManager = Android.App.Application.Context.GetSystemService(Context.ConnectivityService) as ConnectivityManager;
                    var callback = new NetworkCallback
                    {
                        NetworkAvailable = network =>
                        {
                            re = true;
                        }
                    };
                    connectivityManager.RequestNetwork(request, callback);

UdpClient 默认:

using (var client = new UdpClient())
                        {
                            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipAddress), sendPort);
                            client.Connect(ep);
                            client.Send(test, test.Length);
                        }

错误捕获:

{System.Net.Sockets.SocketException (0x80004005):网络不可达 在 System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) [0x000b0] 在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/System/System .Net.Sockets/Socket.cs:892 在 System.Net.Sockets.UdpClient.Connect (System.Net.IPEndPoint 端点) [0x00033] 在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/System /net/System/Net/Sockets/UDPClient.cs:477 在 SmartCube.DeviceFolder.Connection.SocketUdp () [0x00071] in }

注意:

再次提醒大家,该命令适用于Android 10及以下,没有问题,由于Android 10及以上的Wi-Fi Manager更新,它不起作用。

【问题讨论】:

标签: sockets xamarin.forms wifimanager udpclient


【解决方案1】:

如果您的应用面向 Android 10 或更高版本,并且它不是系统应用或 DPC,则以下方法不会返回有用的数据:

  • getConfiguredNetworks() 方法总是返回一个空列表。

  • 每个返回整数值的网络操作方法——addNetwork()updateNetwork()——总是返回 -1。

  • 每个返回布尔值的网络操作(removeNetwork()reassociate()enableNetwork()disableNetwork()reconnect()disconnect())总是返回 false

如果您的应用需要连接到 Wi-Fi 网络,请使用以下替代方法:

  • 要触发与 Wi-Fi 网络的即时本地连接,请在标准 NetworkRequest 对象中使用 WifiNetworkSpecifier

  • 要添加 Wi-Fi 网络以考虑为用户提供 Internet 访问,请使用 WifiNetworkSuggestion 对象。您可以通过分别调用addNetworkSuggestions()removeNetworkSuggestions() 添加和删除出现在自动连接网络选择对话框中的网络。这些方法不需要任何位置权限。

【讨论】:

  • 感谢您的回答。但是我做了所有这些,我仍然有错误
猜你喜欢
  • 1970-01-01
  • 2012-04-28
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2011-10-13
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多