проблема соединения флаттера - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь разработать приложение для флаттера, которое подключается к серверу и обменивается данными с помощью веб-сокета. Сервер находится в .Net Core и использует Asp.Net Core Websockets для реализации этой функции.

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

E/flutter (31498): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (31498): WebSocketChannelException: WebSocketChannelException: WebSocketException: Connection to 'http://127.0.0.1/client#' was not upgraded to websocket
E/flutter (31498): #0      new IOWebSocketChannel._withoutSocket.<anonymous closure> (package:web_socket_channel/io.dart:83:24)
E/flutter (31498): #1      _invokeErrorHandler (dart:async/async_error.dart:13:29)
E/flutter (31498): #2      _HandleErrorStream._handleError (dart:async/stream_pipe.dart:286:9)
E/flutter (31498): #3      _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:168:13)
E/flutter (31498): #4      _RootZone.runBinaryGuarded (dart:async/zone.dart:1328:10)
E/flutter (31498): #5      _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:350:15)
E/flutter (31498): #6      _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:367:16)
E/flutter (31498): #7      _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:266:7)
E/flutter (31498): #8      _SyncStreamController._sendError (dart:async/stream_controller.dart:767:19)
E/flutter (31498): #9      _StreamController._addError (dart:async/stream_controller.dart:647:7)
E/flutter (31498): #10     _RootZone.runBinaryGuarded (dart:async/zone.dart:1328:10)
E/flutter (31498): #11     _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:350:15)
E/flutter (31498): #12     _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:367:16)
E/flutter (31498): #13     _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:266:7)
E/flutter (31498): #14     _SyncStreamController._sendError (dart:async/stream_controller.dart:767:19)
E/flutter (31498): #15     _StreamController._addError (dart:async/stream_controller.dart:647:7)
E/flutter (31498): #16     new Stream.fromFuture.<anonymous closure> (dart:async/stream.dart:110:18)
E/flutter (31498): #17     _RootZone.runBinary (dart:async/zone.dart:1386:54)
E/flutter (31498): #18     _FutureListener.handleError (dart:async/future_impl.dart:141:20)
E/flutter (31498): #19     Future._propagateToListeners.handleError (dart:async/future_impl.dart:649:47)
E/flutter (31498): #20     Future._propagateToListeners (dart:async/future_impl.dart:670:24)
E/flutter (31498): #21     Future._completeError (dart:async/future_impl.dart:489:5)
E/flutter (31498): #22     Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:537:7)
E/flutter (31498): #23     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (31498): #24     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

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

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

Проблема возникает только тогда, когда я пытаюсь подключить приложение флаттера к ядру .Net websocket server.

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

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final channel = new IOWebSocketChannel.connect("ws://192.168.1.139/client");

Вот реализация _MyHomePageState

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

initState() {
        super.initState();
        widget.channel.stream.listen(this.onData, onError: onError, onDone: onDone);

    (() async {
      setState(() {

      });
    });
  }

  onDone(){
    debugPrint("Socket is closed");
  }

  onError(err){
    debugPrint(err.runtimeType.toString());
    WebSocketChannelException ex = err;
    debugPrint(ex.message);
  }

  onData(event){
    debugPrint(event);
  }

, что всегда приводит к ошибке onError со следующим выводом

I/flutter ( 4608): WebSocketChannelException
I/flutter ( 4608): WebSocketChannelException: WebSocketException: Connection to 'http://18.217.117.92/client#' was not upgraded to websocket
I/flutter ( 4608): Socket is closed

Я понимаю, что это как-то связано с тем, как пакет dart websocket выполняет рукопожатие с сервером, но не может точно определить проблему.

Может кто-нибудь выяснить, что именно здесь не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...