Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

690
Views
java.net.SocketException: socket falló: EPERM (Operación no permitida)

Estoy trabajando en un proyecto de Android Studio con varias actividades. Actualmente estoy tratando de leer la salida de un Java Servlet en localhost pero parece fallar debido a un permiso de socket.

Hice un nuevo proyecto, usé exactamente el mismo código y funcionó perfectamente. Así que no entiendo por qué no está dispuesto a trabajar en mi proyecto.

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

Espero que lea los datos pero falla en esta línea:

 InputStream in = urlConnection.getInputStream();

Esta es la salida del error:

 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)
over 4 years ago · Santiago Trujillo
14 answers
Answer question

0

En primer lugar, debe cambiar su manifiesto de Android .xml. Pero después de esta acción, debe desinstalar la aplicación y ejecutarla nuevamente. https://developer.android.com/training/basics/network-ops/connecting

y código aquí:

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

en AndroidManifest.xml

over 4 years ago · Santiago Trujillo Report

0

Tuve que desinstalar la aplicación del emulador y luego todo empezó a funcionar. Solo necesitaba el siguiente permiso en AndroidManifest.xml

 <uses-permission android:name="android.permission.INTERNET" />
over 4 years ago · Santiago Trujillo Report

0

Simplemente desinstale la aplicación del emulador, vuelva a ejecutarla y funcionará. yo tuve el mismo problema

Para desinstalar la aplicación, ejecute su proyecto cuando aparezca el mensaje "la aplicación se detuvo", haga clic en "información de la aplicación" y luego desinstale.

over 4 years ago · Santiago Trujillo Report

0

Si alguien todavía tiene este problema, lo encontré cuando usé VPN e intenté conectarme a wifi mientras el celular estaba encendido. Estaba usando el cliente Anyconnect VPN. La solución es habilitar el bypass de permiso que le permitirá vincular un socket a una red específica si esto es lo que está buscando.

AnyConnect solo usa allowBypass si está configurado en sus restricciones administradas (por EMM), a través de esta clave: vpn_connection_allow_bypass.

over 4 years ago · Santiago Trujillo Report

0

  1. Agregue el permiso ACCESS_NETWORK_STATE en el manifiesto
  2. Emulador de reinstalación
over 4 years ago · Santiago Trujillo Report

0

Resuelto: todo lo que tenía que hacer era desinstalar la aplicación del emulador o del dispositivo físico conectado y ejecutarla nuevamente.

over 4 years ago · Santiago Trujillo Report

0

Establece android:usesCleartextTraffic="true" en el archivo de manifiesto. Agregue el permiso INTERNET . Desinstale la aplicación y luego vuelva a instalarla.

over 4 years ago · Santiago Trujillo Report

0

tuve que borrar esto

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

y guarda esto

 android:usesCleartextTraffic="true" <uses-permission android:name="android.permission.INTERNET" />
over 4 years ago · Santiago Trujillo Report

0

Establece android:usesCleartextTraffic="true" en el archivo de manifiesto. Agregue el permiso INTERNET. Desinstale la aplicación y luego vuelva a instalarla. A mí me funciona.

over 4 years ago · Santiago Trujillo Report

0

Tuve el mismo problema en el emulador de Android, incluso después de agregar

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

y

 android:usesCleartextTraffic="true"

y reinstalar la aplicación todavía tenía el problema en mi emulador.

AVD Manager -> Clic derecho -> Arranque en frío ahora

resolvió mi problema, parece que si ejecutamos la aplicación inicialmente sin agregar permisos de Internet / clearTextTraffic, es posible que necesitemos un arranque en frío ya que almacena algo de caché.

over 4 years ago · Santiago Trujillo Report

0

Si olvidó agregar <uses-permission android:name="android.permission.INTERNET" /> a su Manifest.xml, hágalo ahora

Si ya la agregó pero el error persiste, primero desinstale la aplicación y luego vuelva a ejecutarla.
La mayoría de las veces me encuentro con el mismo problema porque olvidé <uses-permission android:name="android.permission.INTERNET" /> en mi primera instalación.
El sistema operativo pensó que la aplicación no necesita permiso de Internet (lo cual es tonto en mi opinión) y no verificaría ninguna actualización de permiso para la aplicación (que es aún más tonto en mi opinión).

La única forma de decirle al sistema operativo Android que verifique sus solicitudes de permiso actualizadas es desinstalar la aplicación primero antes de volver a instalarla.

creo que tampoco

  • <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • ni android:usesCleartextTraffic="true" realmente importa aquí
over 4 years ago · Santiago Trujillo Report

0

Si está utilizando un servidor localhost en su Mac, utilice la dirección IP local asignada a su máquina como su dirección API. es decir, 192.168.xx (búsquelo en Configuración -> Red) no localhost ni 127.0.0.1.

Como mencionaron anteriormente, desinstale la aplicación y luego coloque estas etiquetas en su manifiesto:

en la sección de aplicaciones:

 android:usesCleartextTraffic="true"

Luego, en su sección de manifiesto:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.a.myapp"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
over 4 years ago · Santiago Trujillo Report

0

Llegué un poco tarde a esto, pero encontré este problema y descubrí que android:usesCleartextTraffic requiere una versión API mínima de 23. Por lo tanto, en el archivo de compilación de gradle del module , cambie la versión mínima a 23 y debería funcionar.

over 4 years ago · Santiago Trujillo Report

0

Solución de trabajo.

  1. compruebe si tiene permiso de INTERNET y permiso ACCESS_NETWORK_STATE, si no, agréguelos.
  1. desinstale la aplicación e instálela de nuevo. Si no prueba en otro dispositivo. Funcionará al 100%. Enfrento el mismo problema y lo resolví siguiendo estos pasos.
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!