Скорее всего, я отправляю данные на сервер и получаю данные даже очень больших данных, используя код ниже между =========== строками.Это было моим экспериментом, потому что мне нужно какое-то промежуточное решение, чтобы я мог подключить свое приложение Flutter к tcp-сокету.Для этого я выбираю auqeduct.io.Сегодня из справки от Gazi я нашел решение для завершения моего кода между =========== строками.
Из-за того, что я использую auqeduct, их функция дескриптора выглядит следующим образом.
@override
Future<RequestOrResponse> handle(Request request) async {
Итак, я пытаюсь изменить свой код и использовать Future для возврата данных сокета в виде строки.Я могу получить данные, используя приведенный ниже код между строками ===========, но я не могу получить какие-либо данные с помощью асинхронного Future _handle (String _request).
_socket.listen ((data) printданные не могут присвоить данные строке, поэтому я не могу вернуть строку.
работает: print ("(1) $ _secureResponse");
не работает: _secureResponse = new String.fromCharCodes (data) .trim ();
Если я не использую Future и не помещаю код в main (), все работает отлично.
На моем тестовом сервере я отправляю «Hello World», а взамен я получаю «Welcome Sir / Madam».
Мой вопрос: Как вернуть данные сокета?из будущего в дротике?
import 'dart:async';
import 'dart:io';
import 'dart:convert';
Socket socket;
String _errorData;
String _secureResponse;
void main() async {
var _test = await _handle(“Hello World”);
print("Print _test: $_test");
}
Future<String> _handle(String _request) async {
print("Future Starts Here");
print("Request: $_request");
_errorData = "Server_Error";
if (_request != null) {
print("Request has data");
// =============================================================
Socket _socket;
await Socket.connect("192.168.22.120”, 3000).then((Socket sock) {
_socket = sock;
_socket.listen((data) {
print("Socket start to listen to database");
// GET FROM SERVER *********************
_secureResponse = new String.fromCharCodes(data).trim();
print("(1) $_secureResponse");
}, onError: ((error, StackTrace trace) {
_secureResponse = _errorData;
print("(2) $_secureResponse");
}), onDone: ((){
_socket.destroy();
exit(0);
}), cancelOnError: false);
}).then((_) {
print("Socket sends data to database");
// SENT TO SERVER ************************
_socket.write('$_request\r\n');
}).catchError((AsyncError e) {
_secureResponse = _errorData;
print("(3) $_secureResponse");
exit(1);
});
// ==============================================================
} else {
_secureResponse = _errorData;
print("(4) $_secureResponse");
}
print("(6) $_secureResponse");
print("Future Ends Here");
return _secureResponse;
}
Результат:
- Будущее начинается здесь
- Запрос: " Hello World ”
- В запросе есть данные Socket отправляет данные в базу данных
- (6) null. --- ожидается return" Welcome Sir/ Мадам"
- Будущее заканчивается здесь
- Print_test: null --- ожидается return " Welcome Sir / Madam "
- Запуск сокета для прослушивания базы данных
- (1) " Добро пожаловать, сэр / мадам "