首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter套接字io未连接到节点js套接字io服务器

Flutter套接字io未连接到节点js套接字io服务器
EN

Stack Overflow用户
提问于 2020-01-10 23:51:36
回答 4查看 5.3K关注 0票数 5

我正在尝试使用node.js配对服务器构建一个简单的颤动聊天应用程序。我已经用了几个小时了,但我就是不能让这个应用程序连接到服务器上。

以下是node js服务器:

代码语言:javascript
复制
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);

颤振连接代码:

代码语言:javascript
复制
//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));
    });
}

当函数运行时,代码执行在上面所示的行处暂停,并且节点js服务器根本不响应。但是,这会显示在调试控制台上。

代码语言:javascript
复制
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客户端,它成功地连接到了服务器。

代码语言:javascript
复制
//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()中的套接字函数之前删除‘await’会得到以下结果。

代码语言:javascript
复制
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":[]}]

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-02-19 23:33:55

我用这个颤动插件here尝试了上面的代码,因为我认为你也在使用相同的插件,但我也遇到了同样的问题。我尝试查看由Logcat生成的任何错误日志,我发现了一个条目connecting...null,它被卡住了,但不知道如何修复或问题出在哪里。我尝试了另一个颤动插件here,并在仿真器中测试了它,它在下面的示例代码中工作得很好。如果您可以使用不同的颤动插件,那么这可能会很有用。

代码语言:javascript
复制
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客户端代码-

代码语言:javascript
复制
IO.Socket socket = IO.io('http://10.0.2.2:8080', <String, dynamic>{
   'transports': ['websocket'],
   'autoConnect': false,
});
socket.connect();
socket.emit('/test', 'test');
票数 10
EN

Stack Overflow用户

发布于 2021-01-08 22:48:26

Downgrading我的服务器的socket.io version为我工作。如上所述,如果您使用的是nodejs,请尝试卸载socket.io并安装一个旧版本,如下所示:

代码语言:javascript
复制
npm uninstall socket.io
npm install socket.io@2.3.0

大多数flutter socket io客户端软件包都与socket.io version 2.3.0兼容。我建议你降级到这个级别,以防你遇到类似的问题。

票数 10
EN

Stack Overflow用户

发布于 2020-12-24 12:03:56

尝试将服务器的socket io版本降级。某些socket io客户端软件包(Flutter)与最新的服务器端socket io (node.js)不兼容。我的服务器配置使用版本3.0.4。由于某些原因,它与adhara_socket_io: 0.4.2socket_io_client: 0.9.12不兼容。通过降级,我的node.js socket io版本适用于这两个客户端库

代码语言:javascript
复制
npm uninstall socket.io
npm install socket.io@2.3.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59684933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档