node.js - Flutter socket io没有连接到 Node js socket io服务器

标签 node.js flutter socket.io

我正在尝试使用 node.js 匹配服务器构建一个简单的 flutter 聊天应用程序。我已经用这个工作了几个小时,但我无法让应用程序连接到服务器。

这是 Node js 服务器:

var express=require('express');
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

var allClients = {};

io.on('connection', function (socket) {
    io.to(socket.id).emit('userCount', Object.keys(allClients).length);
    console.log(socket.id,'joined');
    //match making logic
});

var port = 8080;
console.log(port);
server.listen(port);

Flutter 连接代码:
//Find a match for the user
void findMatch() async {
    SocketIO socketIO = SocketIOManager().createSocketIO("http://192.168.0.32:8080", "/");
    print('Created');
    await socketIO.init(); //code execution pauses indefinitely at this line
    print('Initialized');
    await socketIO.connect();
    print('Connected');

    socketIO.sendMessage('new user', data);

    socketIO.subscribe('match found', (data) async {
      UserData peerData = await getUserData(data.peerId);
      redirectToPage(context, Chat(peerId: data.peerId, peerData: peerData));
    });
}

当函数运行时,代码执行在如上所示的那一行暂停,node js 服务器完全没有反应。但是,这会显示在调试控制台上。
D/FlutterSocketIoPlugin: FlutterSocketIoPlugin( 4490): onMethodCall: socketInit - domain: http://192.168.0.32:8080 - with namespace: /
D/FlutterSocketIoPlugin: TOTAL SOCKETS: ( 4490): 0                                                                 
D/FlutterSocketIoPlugin: TOTAL SOCKETS: ( 4490): 0                                                                 
D/FlutterSocketIoPlugin: added SocketIO( 4490): http://192.168.0.32:8080/                                          
D/FlutterSocketIoPlugin: SocketIO( 4490): connecting...null                                                        

任何帮助表示赞赏。谢谢!

我按照评论中的建议编写了一个简单的 Node js 客户端,它成功连接到服务器。
//client.js
var io = require('socket.io-client');
var socket = io.connect('http://localhost:8080', {reconnect: true});

// Add a connect listener
socket.on('connect', function (socket) {
    console.log('Connected!');
});
socket.emit('CH01', 'me', 'test msg');

编辑:

在 findMatch() 中的套接字函数之前删除“等待”让我得到这个。
D/FlutterSocketIoPlugin: SocketIO(21368): reconnect_error: [{"cause":{"cause":{"detailMessage":"CLEARTEXT communication to 192.168.0.32 not permitted by network security policy","stackTrace":[],"suppressedExceptions":[]},"detailMessage":"websocket error","stackTrace":[],"suppressedExceptions":[]},"detailMessage":"Connection error","stackTrace":[],"suppressedExceptions":[]}]

我试过android:usesCleartextTraffic="true"AndroidManifest.xml但它似乎不起作用。将 http 更改为 https 给出 SSL handshake aborted .也许使用 SSL 证书在远程机器上部署套接字服务器会起作用?将继续挖掘。

最佳答案

我用这个 flutter 插件 here 尝试了上面的代码因为我认为您也使用相同的,但我也遇到了同样的问题。我试图查看 Logcat 生成的任何错误日志我找到了一个条目 connecting...null它被卡在那里但不知道如何修复或问题是什么。我尝试了另一个 flutter 插件here并在模拟器中对其进行了测试,它适用于以下示例代码。如果您可以使用不同的 flutter 插件,那么这可能会很有用。

var express = require('express');
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

io.on('connection', function (socket) {
    console.log(socket.id, 'joined');
    socket.on('/test', function (msg) {
        console.log(msg);
    });
});

var port = 8080;
console.log(port);
server.listen(port);

Flutter 客户端代码 -
IO.Socket socket = IO.io('http://10.0.2.2:8080', <String, dynamic>{
   'transports': ['websocket'],
   'autoConnect': false,
});
socket.connect();
socket.emit('/test', 'test');

关于node.js - Flutter socket io没有连接到 Node js socket io服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59684933/

相关文章:

node.js - Heroku Review 应用程序配置和日志记录(与生产配置/日志记录相比)

Flutter:UI 与 Provider 的 react

dart - 在 Flutter 中设置环境变量

node.js - 通过 final方法发送所有路由

node.js - 如何使用 nodejs 在 Linux 中创建新用户

socket.io - 使用socket.io时对域的限制?

javascript - Node.js - socket.io - 对 io.sockets 的引用突然未定义

angular - 使用 socket.io 模型对 Angular 5 进行单元测试

javascript - 在 TypeScript 中找不到名称 jsPdf

flutter - Flutter-StreamBuilder-Api-页面刷新