java.net.SocketException:套接字失败:EPERM(不允许操作)

2023-11-22

我正在开发一个包含多项活动的 Android Studio 项目。我目前正在尝试读取本地主机上 Java Servlet 的输出,但由于套接字权限,它似乎崩溃了。

我创建了一个新项目,使用完全相同的代码并且工作完美。所以我不明白为什么不愿意为我的项目工作。

public class LoginActivity extends AppCompatActivity {


String apiUrl = "http://10.0.2.2:8080/ProyectService/Servlet?action=login";
EditText username;
EditText password;
AlertDialog dialog;
Usuario session;

@Override
public void onCreate(Bundle savedInstanceState) {
    // Inicializacion de ventana
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getSupportActionBar().hide();

    // Inicializacion de componentes
    username = findViewById(R.id.username);
    password = findViewById(R.id.password);

    // Inicializacion de funcionalidad de botones
    Button button= (Button) findViewById(R.id.login);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            UserLoginTask mAuthTask = new UserLoginTask();
            mAuthTask.execute();
        }
    });

    password = findViewById(R.id.password);
    createAlertDialog("Usuario o Contraseña Incorrectos");
    }

    private void createAlertDialog(String message){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(message)
            .setTitle("Error");
    dialog = builder.create();
    }



    // ASYNCRONUS NETWORK PROCESS

    public class UserLoginTask extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
    }


    @Override
    protected String doInBackground(String... params) {

        // implement API in background and store the response in current variable
        String current = "";
        try {
            URL url;
            HttpURLConnection urlConnection = null;
            try {
                url = new URL(apiUrl);
                System.out.println(apiUrl);
                urlConnection = (HttpURLConnection) url
                        .openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader isw = new InputStreamReader(in);

                int data = isw.read();
                while (data != -1) {
                    current += (char) data;
                    data = isw.read();
                    //System.out.print(current);

                }
                System.out.print(current);
                // return the data to onPostExecute method
                return current;

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Exception: " + e.getMessage();
        }
        return current;
        }
    }

    protected void onPostExecute(String success) {
        Log.i(success, "");
       //attemptLogin();
    }
}

我希望它能够读取数据,但它在这一行崩溃:

InputStream in = urlConnection.getInputStream();

这是错误输出:

java.net.SocketException: socket failed: EPERM (Operation not permitted)
at java.net.Socket.createImpl(Socket.java:492)
at java.net.Socket.getImpl(Socket.java:552)
at java.net.Socket.setSoTimeout(Socket.java:1180)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:114)
at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:93)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

您的应用程序需要额外的权限和/或重新安装。

添加额外权限AndroidManifest.xml<manifest>部分:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

要重新安装,请从模拟器或物理连接的设备中卸载该应用程序,然后再次运行它。 (如果添加权限,请务必重新安装然后.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.net.SocketException:套接字失败:EPERM(不允许操作) 的相关文章

随机推荐

  • Rails:在登录或注册后设计重定向到存储位置?

    我正在编写的 Rails 应用程序中使用 Devise 我想让用户在登录或注册后返回到他们所在的位置 例如 如果我有一个受以下保护的 评论 控制器 before filter authenticate user 然后我希望用户点击 立即评论
  • WPF Treeview 数据绑定混合类型的分层数据

    我的 WPF Treeview 绑定情况有点复杂 我在过去的两天里尝试用谷歌搜索它 并且this这是我想出的关闭方式 但这并不能解决问题 情况如下 我有一个看起来像这样的对象 public class Category public str
  • 窗口函数 LAG 可以引用正在计算值的列吗?

    我需要根据当前记录的其他一些列和前一条记录的 X 值 使用某些分区和顺序 计算某些列 X 的值 基本上我需要以形式实现查询 SELECT
  • 将 Spring Boot 集成到 EAR 项目中

    我有一个使用 Spring Boot 创建的现有战争项目 如何将其打包到具有 EJB 模块的 EAR 中 有没有办法将模型和 dao 包移动到 EJB 模块并用 WAR 模块注入它 您需要一个父项目 其中包括一个 war 项目 这将是您的
  • 循环遍历 LINQ 查询列(而不是行)

    是否可以循环 LINQ 查询的结果 如果可以 如何循环 像这样的东西 var results from a in dt AsEnumerable where a Field
  • 如何判断字符串是否是base64

    我有很多来自不同来源的电子邮件 它们都有附件 其中很多附件名称都是中文的 所以这些 名称由电子邮件客户端转换为 Base64 当我收到这些电子邮件时 我希望解码该名称 但还有其他名称 不是base64 如何使用以下命令区分字符串是否为 ba
  • 如何在标题标签中放置滚动文本?

    我想让标题文本可滚动 我使下面的代码滚动良好 但我输入的文本显示时没有空格 这意味着不考虑字符串中的空格
  • 如何将 URL 作为路径参数传递给 FastAPI 路由?

    我使用 FastAPI 创建了一个简单的 API 并且尝试将 URL 作为任意地址传递到 FastAPI 路由path范围 from fastapi import FastAPI app FastAPI app post path def
  • 如何保存应用了 CSS 滤镜的图像

    我想知道如何将 CSS 过滤器应用于图像 然后将图像保存到磁盘 例如 我有一个图像标签 我可以通过 CSS 应用棕褐色效果 img sepia filter sepia 20 并将该类应用于 HTML 中的图像标签 img src img
  • “for”开头的分号如何工作?

    我刚刚在 Mozilla 网站上看到了这段代码 虽然对我来说它看起来很糟糕 但我可能不熟悉它的用法 for k lt len k if k in t t k searchElement return k 循环开头的分号如何工作 完整的代码是
  • 如何在 JPA 中从 @EmbeddedId 设置反向引用

    有人知道是否可以在 JPA 内建立反向引用 EmbeddedId 例如 有一个形式的实体 Entity public class Entity1 Id GeneratedValue private String identifier pri
  • Rails active_storage:安装不起作用

    我已将 Rails api 应用程序从 5 1 更新到 5 2 我只使用rails api 我正在尝试使用活动存储 我认为问题出在线路上config api only true in config application rb 我做了很多谷
  • Numpy:对于一个数组中的每个元素,找到另一个数组中的索引

    我有两个一维数组 x 和 y 一个比另一个小 我试图找到 y 在 x 中的每个元素的索引 我发现了两种简单的方法来做到这一点 第一个很慢 第二个需要大量内存 缓慢的方式 indices for iy in y indices np wher
  • 使Jackson在序列化时不输出类名(使用Spring MVC)

    有没有办法强制 Jackson 不要将类名放在 Json 输出中 我问了一个question这导致了这个问题 但我希望问的是一个更有针对性的问题 我在执行此操作时使用 Spring MVC 但我不确定这有多重要 所以 而不是 NamedSy
  • Android TabHost 内 Fragment

    我正在开发一个 Android 应用程序 并且使用了 android FragmentPager 选项卡example来自developer android com 此示例使用片段作为选项卡内容 现在我想在其中一个片段中放置一个tabHos
  • MySQL 中标志的 BIT(1) 或 TINYINT

    我经常有一些表需要存储一个标志 该标志可以是 1 或 0 真或假等 我以前用过 TINYINT 我应该使用 BIT 1 吗 为什么或者为什么不 如果您使用的 mysql 版本高于 5 0 3Bit不再是别名Tinyint但如果你创建一个bi
  • 如何从视图中获取托管活动?

    我有一个Activity with 3 EditText和一个自定义视图 它充当专用键盘以将信息添加到EditTexts 目前我正在通过Activity进入视图 以便我可以获得当前聚焦的编辑文本并从自定义键盘更新内容 有没有办法引用父活动并
  • preg_match 多个单词

    我想测试一个字符串以查看它包含某些单词 i e string The rain in spain is certain as the dry on the plain is over and it is not clear preg mat
  • 将Cocos2D添加到xCode 4中的项目中

    我正在从事一个项目 需要具有相同的原生部分 cocoa touch 和 cocos2d 中的某些部分 我已经把所有的原生都做了 现在我需要在项目中集成cocos2d 我的问题是我无法成功地将 cocos2d 库添加到我的项目中 有什么好的解
  • java.net.SocketException:套接字失败:EPERM(不允许操作)

    我正在开发一个包含多项活动的 Android Studio 项目 我目前正在尝试读取本地主机上 Java Servlet 的输出 但由于套接字权限 它似乎崩溃了 我创建了一个新项目 使用完全相同的代码并且工作完美 所以我不明白为什么不愿意为