首页 > 解决方案 > Flutter Web 套接字示例应用程序未连接到本地 NestJS 服务器

问题描述

我试图让Flutter Web 套接字示例从 Android 模拟器中指向我的本地 NestJS 服务器时工作。以下是我尝试过的不同方法:

NestJS 服务器运行在http://127.0.0.1:3000

IOWebSocketChannel.connect('ws://echo.websocket.org')- 这工作正常,但不是我的服务器。

IOWebSocketChannel.connect('ws://10.0.2.2:3000')- 不工作。在我的笔记本电脑上从 Android 模拟器映射到 localhost 的 IP。得到以下错误: HttpException: Connection closed before full header was received, uri = http://10.0.2.2:3000

IOWebSocketChannel.connect('ws://192.168.1.16:3000')- 不工作。192.168.1.16 是我笔记本电脑的 IP。得到以下错误: HttpException: Connection closed before full header was received, uri = http://192.168.1.16:3000

我也尝试过不同的模拟器和不同的安卓版本。它发生在 Android 模拟器、iOS 模拟器和连接到 Xcode 的实际 iPhone 上。我已经搜索了这个网站和其他网站,但没有任何运气。我没有尝试过的唯一解决方案是将我的 NestJS 服务器放在另一台机器或云中,并创建一个指向它的子域。我还在我的 NestJS 服务器上实现了请求日志记录,但我从未看到来自 Flutter 应用程序的任何活动。我可以通过浏览器很好地访问我的服务器,并且服务器上的 Web 套接字实现正在运行。让我觉得这是某种网络问题。

我也玩过构造函数参数:

IOWebSocketChannel.connect('ws://192.168.1.16:3000', 协议: ['websocket'])

不确定如何使用协议参数、Websocket、websocket、websockets 等。不确定我应该看到 HttpException 还是 SocketException。

基于 Flutter web socket 示例如何连接到本地服务器?我需要能够调试和测试这个应用程序。

更新:

只需在此处添加更多信息。我写了一个小控制台程序来尝试隔离它。

此代码有效:

    void main() { 
          var channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
          channel.stream.listen((message) {
             print('message: $message');
          }); 
          channel.sink.add('connected!'); 
   }

此代码不会:

    void main() { 
          var channel = IOWebSocketChannel.connect('ws://192.168.1.16:3000');
          channel.stream.listen((message) {
             print('message: $message');
          }); 
          channel.sink.add('connected!'); 
   }

这是来自不起作用的代码的堆栈跟踪。ws://echo.websocket.org 是 Internet 上的测试 WebSocket 回显站点,192.168.1.16:3000 是在我的笔记本电脑上本地运行的 NestJs WebSocket 节点服务器(可以从使用 socket.io 的网页客户端工作)运行此客户端代码的位置。此代码直接从控制台运行,无需任何设备或模拟器,使用命令“dart ./websoket.dart”。我认为您可以排除模拟器、iOS 和 Android。

Unhandled exception:
WebSocketChannelException: WebSocketChannelException: HttpException: Connection closed before full header was received, uri = http://192.168.1.16:3000
#0 new IOWebSocketChannel._withoutSocket. (package:web_socket_channel/io.dart:84:24)
#1 _invokeErrorHandler (dart:async/async_error.dart:16:24)
#2 _HandleErrorStream._handleError (dart:async/stream_pipe.dart:282:9)
#3 _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:161:13)
#4 _RootZone.runBinaryGuarded (dart:async/zone.dart:1396:10)
#5 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:376:15)
#6 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:394:16)
#7 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:294:7)
#8 _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:812:19)
#9 _StreamController._addError (dart:async/stream_controller.dart:690:7)
#10 _RootZone.runBinaryGuarded (dart:async/zone.dart:1396:10)
#11 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:376:15)
#12 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:394:16)
#13 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:294:7)
#14 _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:812:19)
#15 _StreamController._addError (dart:async/stream_controller.dart:690:7)
#16 new Stream.fromFuture. (dart:async/stream.dart:178:18)
#17 _RootZone.runBinary (dart:async/zone.dart:1455:54)
#18 _FutureListener.handleError (dart:async/future_impl.dart:157:20)
#19 Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
#20 Future._propagateToListeners (dart:async/future_impl.dart:729:24)
#21 Future._completeError (dart:async/future_impl.dart:537:5)
#22 Future._asyncCompleteError. (dart:async/future_impl.dart:593:7)
#23 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#24 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#25 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#26 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)

标签: node.jsflutterdartwebsocketnestjs

解决方案


推荐阅读