java - 执行套接字命令时出现系统错误
问题描述
我正在尝试执行此命令,我得到:
W/System.err: at com.app.activities.navigation.NetworkUtilities.lambda$executeSocketCommand$0(NetworkUtilities.java:101)
2021-03-21 15:44:29.984 16020-16059/? W/System.err: at com.app.activities.navigation.-$$Lambda$NetworkUtilities$yjKxTHWiGKfBSYryXqe0GwJPlNE.run(Unknown Source:4)
产生错误的方法是:
private boolean executeSocketCommand(){
try{
Socket socket = new Socket();
SocketAddress socketAddress = new InetSocketAddress("8.8.8.8", 53);
executor.execute(()->{
try {
socket.connect(socketAddress, 1000); //THIS IS LINE 101
} catch (IOException e) {
e.printStackTrace();
}
});
socket.close();
return true;
}catch(IOException e){
return false;
}
}
在我进行任何网络调用之前的数据连接检查期间调用该方法。
@RequiresApi(api = Build.VERSION_CODES.O)
public boolean isInternetAvailable(Context context) {
boolean connectedToNetwork = false;
boolean connectedToInternet = false;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if(activeNetwork!=null){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
connectedToNetwork = capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
if(connectedToNetwork){
connectedToInternet = executeSocketCommand();
}
} else if(connectivityManager!=null){
if (activeNetwork != null) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
connectedToNetwork = true;
if(connectedToNetwork){
connectedToInternet = executeSocketCommand();
}
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
connectedToNetwork = true;
if(connectedToNetwork){
connectedToInternet = executeSocketCommand();
}
}
}
}
}
return connectedToInternet;
}
我认为这是关闭套接字的问题,但是实际错误是什么,我该如何解决?
解决方案
推荐阅读
- python - 如何使用 python 优化 pandas 数据框的 levenstien 编辑距离?
- javascript - 在外部 API 中使用 Javascript JSON 输出
- mysql - 即使有权限也无法创建 MySQL 数据库
- python - 未来错误问题中的哨兵无效时间戳
- vba - 双击以在访问中输入当前日期/时间
- database - 使用 SQLite 触发器强制显式设置列值
- javascript - 通过给定的键将两个对象数组合并为一个并复制其他值
- javascript - 将 Excel 宏转换为 Google 工作表
- python - 尽管有 url 模式,但无法从浏览器访问 Django 站点
- python - 如何检查我的客户端套接字中的 recv 是否为空