Ошибка отказа в подключении при создании Http-сервера с использованием dart

#flutter #dart #dart-html

#сбой #dart #dart-html

Вопрос:

Я создал сервер с использованием Plane dart и пытаюсь прослушать ответ с помощью HTTP get. Я могу получить доступ к ответу при пинге ввода-вывода в браузере, но при попытке доступа в демонстрационном приложении я получаю ошибку

Исключение SocketException: Ошибка операционной системы: соединение отклонено, errno = 111, адрес = 127.0.0.1, порт = 36000

Мой серверный код выглядит следующим образом :

 class ServerUtilities {
  static Directory _appDirectory;
  static HttpServer _server;
  static File _file;
  ServerUtilities._();

  static ServerUtilities _obj;

  static ServerUtilities instance() {
    if (_obj == null) _obj = ServerUtilities._();
    return _obj;
  }

  Future<Directory> setAppDirectory() async {
    return await getApplicationDocumentsDirectory();
  }

  void initializeServer(String address, int port) async {
    _appDirectory = await setAppDirectory();
    print(_appDirectory.path);
    _file = File('${_appDirectory.path}/sample.txt');
    _file.writeAsString("Hiii ", mode: FileMode.append);

    _server = await HttpServer.bind(address, port);
    print("Server initialized - "   address   ":"   port.toString());
    await for (var req in _server) {
      if (await _file.exists()) {
        print("file exist");
        // req.response.headers.contentType = ContentType.text;
        await _file.openRead().pipe(req.response);
      }
    }
  }

  void stopServer() async {
    await _server.close().catchError(
      (e) {
        print(e);
      },
    ).then(
      (value) => {
        print("Server stopped "),
      },
    );
  }
}
  

Сервер инициализирован, и все работает нормально, и я могу открыть указанный IP-адрес в моем мобильном браузере, и это работает хорошо, но при попытке использовать Http.get я получил вышеуказанную ошибку.

Это мой основной.

 void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  ServerUtilities.instance().initializeServer('127.0.0.1', 8010);
  runApp(
    MaterialApp(
      home: MyApp(),
    ),
  );
}
  

И вот как я пытаюсь получить доступ, и я получаю указанную выше ошибку.

 FutureBuilder(
              future: http.get("http://127.0.0.1:8010"),
              builder: (context, data) {
                if (data.hasData)
                  return Text(
                    data.toString(),
                    style: TextStyle(fontSize: 20),
                  );
                else if (data.hasError) {
                  print(data.error);
                  return Text(
                    data.error.toString(),
                    style: TextStyle(fontSize: 20),
                  );
                } else
                  return Text(
                    "No data",
                    style: TextStyle(fontSize: 20),
                  );
              }),
  

Ответ №1:

Эта ошибка возникает, когда сервер не запущен. Поэтому, пожалуйста, проверьте, работает ли initializeServer метод правильно или нет.

Комментарии:

1. он работает правильно, я проверял это несколько раз, напрямую вводя адрес в chrome (браузер) мобильного устройства и отображая правильные данные. Этот сервер запущен локально на устройстве. Под устройством я подразумеваю мобильный (эмулятор).

2. Выполняются ли инструкции print внутри initializeServer метода?

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

4. Я думаю, что ваш серверный код неверен. Ознакомьтесь с документацией на api.dart.dev/stable/2.9.1/dart-io/HttpServer-class.html