• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

834
Views
SocketException: Error de SO: Conexión rechazada, errno = 111 en flutter usando el backend de django

Estoy creando una aplicación flutter con django rest-framework. La API de registro funciona bien en Postman, pero después de un registro exitoso desde la aplicación flutter, muestra el error anterior. La solicitud se ha enviado a la dirección https.

csrf eliminado. No pasa nada.

Solicitud:

 var data = {'email':signupemailidcontroller.text, 'password1':passwordcontroller.text, 'password2':confirmpasswordcontroller.text, }; //http request here await http.post(websitesignupurl, headers: headers, body: json.encode(data)) .then((onResponse){ print(onResponse.body); }).catchError((onerror){ print(onerror.toString()); });

Salida en Consola:

SocketException: Error de SO: Conexión rechazada, errno = 111

Espero que la respuesta de esta solicitud sea un objeto Json que contenga el usuario y el token.

over 3 years ago · Santiago Trujillo
21 answers
Answer question

0

Harnish, necesito algunos detalles más para depurar este error.

  1. ¿Está ejecutando el servidor localmente o comunicándose con un servidor remoto?
  2. ¿Está ejecutando la aplicación en el emulador de Android?

Solución posible:

Si está ejecutando el servidor localmente y usando el emulador de Android, entonces el punto final de su servidor debe ser 10.0.2.2:8000 : 8000 en lugar de localhost:8000 ya que AVD usa 10.0.2.2 como un alias para la interfaz de bucle invertido de su host (es decir, localhost )

Nota sobre futuros

Noté arriba que el código está usando await y luego en la misma línea. Esto puede ser confuso, para ser claros, await se usa para suspender la ejecución hasta que se complete un futuro, y then es una función de devolución de llamada para ejecutar después de que se complete un futuro. Lo mismo podría escribirse de la siguiente manera

 void myFunction() async { var data = {}; var response = await http.post(URL, headers:headers, body:data); if (response.statusCode == 200) { print(reponse.body); } else { print('A network error occurred'); } }

o el método no asíncrono/en espera

 void myFunction() { var data = {}; http.post(URL, headers:headers, body:data) .then((response) => print(response.body)) .catchError((error) => print(error)); }

Para obtener información más detallada sobre futuros en Dart, lea https://www.dartlang.org/tutorials/language/futures

over 3 years ago · Santiago Trujillo Report

0

  • si en localhost en lugar de localhost use la IP de su red
  • sugerencia: para encontrar IP en cmd, ejecute ipconfig y obtenga el ipv4

1: Ejemplo:

 await http.post("http://127.68.34.23/wp-json/...", headers: headers, body: json.encode(data))

si en el servidor escribe la url de main en url

over 3 years ago · Santiago Trujillo Report

0

Intente agregar <uses-permission android:name="android.permission.INTERNET"/> a su manifiesto. Esto resolvió este problema para mí.

over 3 years ago · Santiago Trujillo Report

0

Además de la respuesta de Rohan, también puedes leer:

No se pueden realizar llamadas a Localhost usando Flutter, se asigna un puerto aleatorio a la llamada HTTP GET

Estaba tratando de ejecutar mi aplicación en un dispositivo físico usando un servidor local, así que tuve que usar el comando mencionado a continuación, aquí tenga en cuenta cambiar el número de puerto de acuerdo con su propio número de puerto

 adb reverse tcp:3001 tcp:3001

Como @maheshmnj señaló que este comando está redirigiendo el puerto 3001 de su teléfono al puerto 3001 de su computadora. En caso de que desee redirigir el puerto 2000 de su teléfono al puerto 3000 de su computadora, entonces podría hacer esto adb reverse tcp:2000 tcp:3000

también puede leer sobre adb y redes a través de la página mencionada a continuación https://developer.android.com/studio/command-line/adb.html

over 3 years ago · Santiago Trujillo Report

0

Arreglé esto con $ adb tcpip <port-your-local-server>

over 3 years ago · Santiago Trujillo Report

0

Esto es lo que tuve que cambiar para corregir el mismo error en mi caso:

  • Inicie Django con python manage.py runserver 0:8000 y no solo python manage.py runserver (0:8000 es la abreviatura de 0.0.0.0:8000 y hace que su aplicación web sea visible en su red local; consulte https://docs. djangoproject.com/en/3.0/ref/django-admin/#runserver )
  • En su aplicación flutter, especifique la dirección del servidor usando la IP local de su PC, es decir, en lugar de http://localhost:8000, use algo como http://192.168.1.2:8000 . Para recuperar su dirección IP actual, ejecute ipconfig en la terminal si está en Windows, de lo contrario, ifconfig .
  • Actualice el host permitido en la configuración de django si es necesario. Por ejemplo, establezca ALLOWED_HOSTS = ['*', ] (¡pero solo en su entorno de desarrollo!)
over 3 years ago · Santiago Trujillo Report

0

Lo que debe hacer es obtener la IP pública de su PC y usarla en su URL, por ejemplo: http://192.168.0.67:3000 , donde 3000 es el número de puerto.

over 3 years ago · Santiago Trujillo Report

0

Fui a la terminal y usé el comando ifconfig

Tengo mi dirección IP: 192.168.0.109

ingrese la descripción de la imagen aquí

Luego simplemente reemplacé esta dirección IP con mi "localhost" en las solicitudes http de la aplicación flutter. ¡Y funcionó como un encanto!

over 3 years ago · Santiago Trujillo Report

0

Tuve este mismo problema una vez. Después de revisar algunas respuestas de stackoverflow demasiado complicadas y buscar en Google, finalmente lo descubrí. En este caso, lo más probable es que estés usando un emulador de Android. Entonces, solo enciende los datos móviles en el emulador. Inténtalo de nuevo, estoy seguro de que esta vez funcionará.

over 3 years ago · Santiago Trujillo Report

0

Tuve el mismo problema al ejecutar en un dispositivo real, y solo cambiar la IP en el enlace API no funciona.

La solución para mí fue ejecutar el servidor con el siguiente comando:

 manage.py runserver 0.0.0.0:8000

Luego pase la IP de su máquina al enlace API en lugar de localhost, como se muestra a continuación:

 http://192.168.0.67:8000
over 3 years ago · Santiago Trujillo Report

0

Tuve el mismo problema en flutter con spring backend. En lugar de usar 'http://localhost:8080/' en mis solicitudes, cambié esto a 'http://143.235.7.641:8080/' donde '143.235.7.641' es mi dirección IPv4 de Wi-Fi, y funcionó .

(NOTA: supongo que está probando aleteo en un teléfono físico, y el teléfono y la computadora están conectados al mismo wi-fi).

over 3 years ago · Santiago Trujillo Report

0

En C#[.net core api], vaya a launchSettings.json en la pestaña Propiedades y cambie el siguiente código a este (cambie localhost a 0.0.0.0 en applicationURl) y en la aplicación (flutter), use su IP IPV4 local. ej.: (192.169.0.10)

 "coreWebAPI": { "commandName": "Project", "launchBrowser": false, "launchUrl": "api/values", "applicationUrl": "http://0.0.0.0:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }
over 3 years ago · Santiago Trujillo Report

0

Para que los usuarios de Mac verifiquen la dirección IP

en el tipo de terminal: ipconfig getifaddr en0 y use esa dirección IP como se muestra a continuación

 import 'dart:io'; import 'package:http/http.dart' as http; import 'package:fluttertoast/fluttertoast.dart'; class AuthAction { static String BASE_URL = 'http://192.168.0.105:27017/'; static Future<Null> signUpAction( firstName, lastName, email, password, userName) async { try { http.Response res = await http.post( Uri.parse(BASE_URL + 'signUp' )); print(res); if (res.statusCode == 200) { } } catch (err) { print(err); // Fluttertoast.showToast(msg: 'err'); } } }

Nota: no toqué el puerto en el que se ejecuta mi servidor mongo-node. que es 27017

over 3 years ago · Santiago Trujillo Report

0

Pruebe este enlace para retrasar la función y no obtendrá este error.

 Future.delayed(const Duration(milliseconds: 500), () { widget.callback(); });

funciona para mi

over 3 years ago · Santiago Trujillo Report

0

Si está ejecutando en un teléfono real, obtendrá este error incluso si agrega su dirección de host local al host permitido. Para mí, conectar mi computadora portátil al punto de acceso de mi teléfono y ejecutar el servidor django con la dirección ipv4 de la computadora portátil (que puede encontrar usando el comando ipconfig) mediante python manage.py ejecuta el servidor 192.168. . : 8000, es decir, su dirección ipv4: número de puerto, luego podrá acceder al servidor django usando el navegador de su teléfono también, ahora agregue esta su dirección ipv4 a su host permitido. Y cambie su URL de localhost o 127.0.0.1 a su dirección ipv4. Espero que esto resuelva tu problema.

over 3 years ago · Santiago Trujillo Report

0

Reemplace su URL con:

 Uri.parse("YourURL").replace(host: "YourIPAddress");

Explicación: este error significa que su dirección de host no es correcta (como ya se señaló en las respuestas anteriores). Como probablemente tenga un dispositivo físico, debe acceder al servidor emulador que conectó a su computadora (también conocido como su dirección IP).

¿Cómo obtener mi dirección IP?

MAC: ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'

WINDOWS: netsh interface ip show address | findstr "IP Address"

over 3 years ago · Santiago Trujillo Report

0

Sé que la pregunta es demasiado antigua, pero responderé esto porque puede ser útil para alguien que tiene este problema.

Sin más detalles, no puedo dar una solución específica. Pero con las siguientes condiciones puede dar una solución específica.

  • Me imagino que el host API estaba en la computadora local
  • Me imagino que usas tu emulador para ejecutar la aplicación.

La URL que probó con el cartero puede ser algo como esto http://127.0.0.1:[port number]/register o http://localhost:[port number]/register . Pero es posible que esto no funcione con un emulador porque no tiene acceso a esa URL. Para obtener acceso a su host local, debe averiguar la dirección del host.

Siga estos pasos para obtener su dirección de host.

  • Haga clic en los tres puntos (Más) en el emulador de Android
  • Configuración -> Proxy
  • Puede cambiar su dirección de host si lo desea seleccionando `Configuración de proxy manual

Luego puede ver su host name con el port number . Luego reemplace su URL con aquellas como http://10.0.0.2:5000/register .

ingrese la descripción de la imagen aquí

over 3 years ago · Santiago Trujillo Report

0

Si está utilizando 'localhost' en su URL, cámbielo a su dirección ipv4 y funcionará

over 3 years ago · Santiago Trujillo Report

0

final response = await client.post( "http://192.xxx.xx.xx/api/signin", headers: {"Authorization": apiKey}, body: jsonEncode({ "username": username, "password": password, }));

Incluso tuve un error de excepción de socket, pero reemplacé mi dirección IP y no mencioné ningún número de puerto y funcionó para mí, y si menciono el número de puerto arrojaría un error. Esperando que esto funcione.

Estoy usando Flask para backend, usando bloques.

over 3 years ago · Santiago Trujillo Report

0

Este problema ocurre cuando el punto final es incorrecto o su host y el backend del servidor (API de Laravel de ejemplo) no comparten la misma dirección IP.

La solución es.

  1. Conecta tu espacio de trabajo (computadora, emulador, dispositivos) en la misma red.
  2. Encuentre su IP escribiendo en la terminal ifconfig .
  3. Si crea su API con Laravel, inicie el servidor asignando IP ADDRESS de su computadora, sudo php artisan serve --host YOUR_COMPUTER_IP_ADDRESS --port NUMBER

Ejemplo:

 `sudo php artisan serve --host 192.168.1.11 --port 80`
  1. Pruebe su terminal en Postman o una aplicación similar y escriba http://192.168.1.11:80/Your_Route
  2. Si todo funciona bien, puede ejecutar con la aplicación. ¡¡¡Ir!!!
over 3 years ago · Santiago Trujillo Report

0

Solución que funcionó en mi máquina

 [√] Flutter (Channel stable, 2.5.3, on Microsoft Windows [Version 10.0.19043.1288], locale en-US) [√] Android toolchain - develop for Android devices (Android SDK version 31.0.0) [√] Chrome - develop for the web [√] Android Studio (version 2020.3) [√] VS Code (version 1.61.2) [√] Connected device (3 available)

PASO: 1 (obtén tu ipv4)

en tipo terminal/cmd

  • ifconfig para Mac/Linux/Unix
  • ipconfig para Windows

obtendrá algún resultado en Windows parece ingrese la descripción de la imagen aquí

PASO: 2 (cambiar la URL de su solicitud)

❌ No hagas

  • http.get('localhost/my-local-rest-api/etc'
  • 127.0.0.1//my-local-rest-api/etc .

✅ Hacer

  • para android http.get('10.0.2.2/my-local-rest-api/etc
  • para ios http.get('192.168.8.155/my-local-rest-api/etc

IMPORTANTE

⚠ siempre pase Uri en lugar de un ejemplo de cadena sin formato: http.get(Uri.parse('my-url-in-raw-string'))

PASO 3: habilite las conexiones de red sin cifrar

para Android

en android/app/src/debug/AndroidManifest.xml

 <manifest ...other params...> // STEP: 1 make sure you have INTERNET permission <uses-permission android:name="android.permission.INTERNET" /> <application android:label="YourAppName" android:usesCleartextTraffic="true"> <-- STEP: 2 add this line <activity </application> </manifest>

para iOS

en ios/Runner/Info.plist agrega esto

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsLocalNetworking</key> <true/> </dict>
over 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error