如何解决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
对象。您可以通过分别调用NetworkRequest
和WifiNetworkSuggestion
添加和删除出现在自动连接网络选择对话框中的网络。这些方法不需要任何位置权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。