首页 > 解决方案 > 执行套接字命令时出现系统错误

问题描述

我正在尝试执行此命令,我得到:

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;
    }

我认为这是关闭套接字的问题,但是实际错误是什么,我该如何解决?

标签: javaandroidsockets

解决方案


推荐阅读