Flutter(模拟器)未连接到本地 Socket.io

Pab*_*yes 1 android node.js socket.io dart flutter

我正在尝试使用 Flutter通过Socket.io连接到node.js 中的本地服务器。当我从浏览器连接时它工作正常,但它不能使用我的 Android/iOS 模拟器连接。我的 socket.io 代码非常简单

// socket messages
io.on("connection", client => {
    console.log("New device connected!")

    // print in the console when some device disconnects
    client.on("disconnect", data => {
        console.log("disconnected!")
    })
})
Run Code Online (Sandbox Code Playgroud)

Flutter 代码(也很简单):

IO.Socket socket = IO.io('http://localhost:3000', <String, dynamic>{
    'transports': ['websocket'],
    'autoConnect': false,
});

// Dart client
socket.on('connect', (_) {
    print('connect');
});
socket.on('event', (data) => print(data));
socket.on('disconnect', (_) => print('disconnect'));
socket.on('fromServer', (_) => print(_));
Run Code Online (Sandbox Code Playgroud)

它总是每约 30 秒显示“断开连接”(在颤振控制台中),同样在 node.js 中它从不显示“连接新设备!”


我在用什么?

Flutter Socket.io 依赖

发布规范.xml

dependencies:
  flutter:
    sdk: flutter
  socket_io_client: ^0.9.11
  provider: ^4.3.2+2
Run Code Online (Sandbox Code Playgroud)

Pab*_*yes 13

这不工作有不同的原因,但在这里我描述了其中的几个你可以如何解决它。

首先检查服务器是否响应

  1. 检查您是否可以使用您的 PC 网络浏览器访问它,它应该类似于

node.js 控制台

  1. 检查您的设备网络浏览器是否可以访问

在此处输入图片说明

如果这两件事都正常,请尝试使用以下解决方案之一:


解决方案#1

您在模拟器浏览器(不是在您的 PC 浏览器)中测试的 url 与您需要在 flutter 应用程序中使用的 url 相同。

IOS

http://localhost:3000 # port can change, check your node.js config
http://<your_pc_ip:3000>:3000 # you can check it in the preferences or terminal -> ipconfig
Run Code Online (Sandbox Code Playgroud)

安卓

http://10.0.2.2:3000
http://localhost:3000 # port can change, check your node.js config
http://<your_pc_ip:3000>:3000 # you can check it in the preferences or terminal -> ipconfig

Run Code Online (Sandbox Code Playgroud)

解决方案#2

我的 node.js 项目使用的是 socket.io 版本 3.0.0(最新的),但看起来我的 flutter 客户端不支持它,所以尝试降级到版本 2.3.0(不要手动执行,在换句话说不要手动修改文件)

http://localhost:3000 # port can change, check your node.js config
http://<your_pc_ip:3000>:3000 # you can check it in the preferences or terminal -> ipconfig
Run Code Online (Sandbox Code Playgroud)

并且您的 package.json 将是(在您的 node.js 项目中)

http://10.0.2.2:3000
http://localhost:3000 # port can change, check your node.js config
http://<your_pc_ip:3000>:3000 # you can check it in the preferences or terminal -> ipconfig

Run Code Online (Sandbox Code Playgroud)

注意:如果您想继续使用 socket.io 3.0 版而不是 v2.3.0,那么您应该使用新版本的Flutter 客户端(目前处于测试阶段):Flutter Client for Socket.io v3.0

解决方案#3

由于某种原因,“自动连接”并不总是有效,所以尝试手动连接它。

npm uninstall socket.io
npm install socket.io@2.3.0
Run Code Online (Sandbox Code Playgroud)

解决方案#4

也许有防火墙或其他东西阻止了您的端口(我的 3000),请尝试使用另一个端口运行它。您需要更改服务器中的配置,并更改 flutter 应用程序中的 url(还需要使用您的模拟器/模拟器浏览器进行测试)

就是这样......它应该工作。

你应该看到类似的东西: Flutter

颤振代码

服务器

在此处输入图片说明

  • 我已经为此苦苦挣扎了两天。降级我的服务器的套接字 io 版本对我有用。谢谢! (2认同)