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 中它从不显示“连接新设备!”
我在用什么?
发布规范.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
这不工作有不同的原因,但在这里我描述了其中的几个你可以如何解决它。
首先检查服务器是否响应
如果这两件事都正常,请尝试使用以下解决方案之一:
您在模拟器浏览器(不是在您的 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)
我的 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
由于某种原因,“自动连接”并不总是有效,所以尝试手动连接它。
npm uninstall socket.io
npm install socket.io@2.3.0
Run Code Online (Sandbox Code Playgroud)
也许有防火墙或其他东西阻止了您的端口(我的 3000),请尝试使用另一个端口运行它。您需要更改服务器中的配置,并更改 flutter 应用程序中的 url(还需要使用您的模拟器/模拟器浏览器进行测试)
就是这样......它应该工作。
你应该看到类似的东西: Flutter
服务器
| 归档时间: |
|
| 查看次数: |
3509 次 |
| 最近记录: |