SocketException: соединение отклонено при подключении к PostgreSQL с мобильного устройства

Мой код работает на vscode, и я использую свой телефон для запуска приложения по беспроводной сети. Я тоже подключен к той же сети Wi-Fi. Когда я запускаю приложение на своем ноутбуке, оно подключается к базе данных PostgreSQL, и я могу зарегистрировать учетную запись. Однако когда я пытаюсь зарегистрироваться на своем телефоне, появляется такая ошибка: Произошло исключение. SocketException (SocketException: соединение отклонено (ошибка ОС: соединение отклонено, ошибка = 111), адрес = 192.168.1.96, порт = 37866)

Это мой блок кода

import 'package:postgres/postgres.dart';

Future<void> registerUser(
  String username, String password, String email) async {
  final connection = PostgreSQLConnection(
    '192.168.1.96', // Host
    5432, // Port
    'thesis', // Database name
    username: 'postgres', // Username
    password: '123', // Password
  );

  await connection.open();

  await connection.execute(
    'INSERT INTO users (username, password, email) VALUES (@username, @password, @email)',
    substitutionValues: {
      'username': username,
      'password': password,
      'email': email,
    },
  );

  await connection.close();
}

  • Сетевое подключение: проверено, что ноутбук и мобильное устройство подключены к одной и той же сети Wi-Fi. Проблем с сетевым подключением не обнаружено.
  • Доступность порта: проверяется, доступен ли порт, используемый PostgreSQL, для входящих соединений. Никаких конфликтов или проблем с доступностью портов обнаружено не было.
  • Настройки брандмауэра: я проверил настройки брандмауэра моего ноутбука, чтобы убедиться, что они не блокируют входящие соединения через порт PostgreSQL (обычно 5432). Соответствующие блоки не найдены.

Это странное сообщение об ошибке. Почему он подключается к порту 37866? Или, если это порт клиента, почему в этом случае он сообщается непосредственно рядом с IP-адресом сервера?

jjanes 13.04.2024 17:17

Я думаю, что порт, который отображался в ошибке, был портом моего телефона, потому что, когда я пытаюсь повторно запустить код, порт в ошибке продолжает меняться.

seyan 13.04.2024 17:31

Порт PostgreSQL по умолчанию — TCP 5432. Также проверьте, работает ли сервер Postgres на всех интерфейсах, а не только на localhost/127.0.0.1/::1.

Robert 13.04.2024 18:44

@Роберт, я проверил свой файл postgresql.conf, он прослушивает все доступные сетевые интерфейсы. Это настройка моего list_addresses в файле postgresql.conf: Listen_addresses = '*'

seyan 14.04.2024 01:13
1
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я исправил проблему, используя это решение.

Решение включает использование команды adbverse для пересылки трафика с порта хоста на порт устройства.

В моем случае я выполнил следующую команду:

adb reverse tcp:65535 tcp:39577

Я получил порт устройства, когда запустил команду adb devices в cmd, и он показал подключенный IP-адрес с портом: 192.168.1.216:39577

Другие вопросы по теме