You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Socket.io问题:socket.on()无法接收数据,求排查方案

问题解决

核心原因:Socket.io版本不兼容

你客户端使用的是Socket.io 4.5.0,但服务器端安装的Socket.io版本大概率和客户端不匹配——Socket.io不同大版本(如2.x和4.x)的通信协议不兼容,会出现连接成功但事件无法接收的情况。

修复步骤

  1. 统一Socket.io版本
    在项目根目录执行命令,安装与客户端一致的版本:
npm install socket.io@4.5.0
  1. 规范服务器端代码细节
    io.on('connection')的参数应为socket而非data(虽不影响功能,但符合代码规范):
io.on('connection', function(socket) {
    console.log("客户端已连接");
});
  1. 可选:优化数据发送时机
    如果需要仅在有客户端连接时发送串口数据,可将串口监听逻辑移入connection事件:
io.on('connection', function(socket) {
    console.log("客户端已连接");
    parser.on('data', function(data) {
        console.log(data);
        io.emit('data', data);
    });
});

修正后的完整服务器代码(app.js)

var SerialPort = require("serialport");
var http = require('http');
var fs = require('fs');

var index = fs.readFileSync('index.html');

const parsers = SerialPort.parsers;
const parser = new parsers.Readline({
    delimiter: '\r\n'
});

var port = new SerialPort('COM3', {
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false
})

port.pipe(parser);

var app = http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type':'text/html'});
    res.end(index);
});

var io = require('socket.io').listen(app);

io.on('connection', function(socket) {
    console.log("客户端已连接");
});

parser.on('data', function(data) {
    console.log(data);
    io.emit('data', data);
});

app.listen(3000);

客户端代码无需修改

你的index.html代码逻辑正常,确保页面加载时Socket.io客户端能正确连接到服务器即可。

内容的提问来源于stack exchange,提问作者Genesis1337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:36:21