#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