System.Net.Sockets.SocketException (0x80004005): 网络不可达

问题描述

我有一些命令可以在较低版本的 Android 上正常运行,但是由于 WiFi 管理器在 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 endPoint) [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] 中 }

注意:

再次提醒您,此命令适用于Android 10及以下版本,没有问题,由于Android 10及以上版本的Wi-Fi Manager更新而无法使用。

解决方法

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

  • git clone https://username:password@github.com/myrepository/repositoryname.git 方法总是返回一个空列表。

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

  • 每个返回布尔值的网络操作——updateNetwork()removeNetwork()reassociate()enableNetwork()disableNetwork()和{{1} }——总是返回reconnect()

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

  • 要触发到 Wi-Fi 网络的即时本地连接,请在标准 disconnect() 对象中使用 false

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