Мой код работает на 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();
}
Я думаю, что порт, который отображался в ошибке, был портом моего телефона, потому что, когда я пытаюсь повторно запустить код, порт в ошибке продолжает меняться.
Порт PostgreSQL по умолчанию — TCP 5432. Также проверьте, работает ли сервер Postgres на всех интерфейсах, а не только на localhost/127.0.0.1/::1.
@Роберт, я проверил свой файл postgresql.conf, он прослушивает все доступные сетевые интерфейсы. Это настройка моего list_addresses в файле postgresql.conf: Listen_addresses = '*'
Я исправил проблему, используя это решение.
Решение включает использование команды adbverse для пересылки трафика с порта хоста на порт устройства.
В моем случае я выполнил следующую команду:
adb reverse tcp:65535 tcp:39577
Я получил порт устройства, когда запустил команду adb devices в cmd, и он показал подключенный IP-адрес с портом: 192.168.1.216:39577
Это странное сообщение об ошибке. Почему он подключается к порту 37866? Или, если это порт клиента, почему в этом случае он сообщается непосредственно рядом с IP-адресом сервера?