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

Node.js替换C#连接非HTTP设备的Socket问题求助

问题描述

原系统使用C#通过原生Socket连接远程设备,基于IP+端口建立连接,收发短纯文本消息。现计划用Node.js重写客户端,环境为Node.js v21.7.1、Windows 10 Pro 10.0.19045,尝试两种方案后均出现问题:

方案1:socket.io-client

代码示例:

var socket    = require("socket.io");
var socketcli = require("socket.io-client");
...
var strTestCli = "X.X.X.X:1024";
var sckTest = socketcli.connect(strTestCli);
console.dir(sckTest);
sckTest.on("connection", objConn => {
    console.log("Connected to " + strTestCli);
    objConn.on("disconnect", () => {
        console.log("Connected to " + strTestCli + " disconnected!");
    });
});

输出显示sckTest的uri为undefined//X.X.X.X:1024,engine的hostname为undefined、port为80,连接异常。

方案2:websocket模块

代码示例:

var wsCli = require("websocket").client;
...
var strTestCli = "ws://X.X.X.X:1024/";
var sckTest = new wsCli(strTestCli, 'echo-protocol');
console.dir(sckTest);
sckTest.on("connectFailed", err => {
    console.log(err);
});
sckTest.on("connect", objConn => {
    console.log("Connected to " + strTestCli);
    objConn.on("disconnect", () => {
        console.log("Connected to " + strTestCli + " disconnected!");
    });
});

输出的uri信息正常,但仍无法建立有效连接。

解决方案

你确实走错了方向,核心问题是选了不匹配的库:

  • socket.io-client是Socket.IO协议的专用客户端,需要服务端也运行Socket.IO框架才能通信,而你的远程设备是原生TCP Socket服务,协议不兼容,所以无法正常连接。
  • websocket模块是WebSocket协议客户端,WebSocket是基于HTTP的应用层协议,和原生TCP Socket不属于同一协议体系,设备未实现WebSocket协议的话自然连不上。

正确的做法是使用Node.js内置的net模块,它专门用于创建原生TCP Socket客户端,和你之前C#的Socket逻辑完全匹配。

示例代码

const net = require('net');

// 设备IP和端口
const deviceHost = 'X.X.X.X';
const devicePort = 1024;

// 创建TCP客户端实例
const client = new net.Socket();

// 发起连接
client.connect(devicePort, deviceHost, () => {
    console.log(`已连接到 ${deviceHost}:${devicePort}`);
    // 发送纯文本消息
    client.write('Hello from Node.js TCP Client!');
});

// 监听设备返回的消息
client.on('data', (data) => {
    console.log(`收到设备消息: ${data.toString()}`);
    // 按需处理消息,比如主动关闭连接
    // client.destroy();
});

// 监听连接关闭事件
client.on('close', () => {
    console.log(`与 ${deviceHost}:${devicePort} 的连接已关闭`);
});

// 监听连接错误
client.on('error', (err) => {
    console.error(`连接错误: ${err.message}`);
});

代码说明

  • net.Socket对应C#中的Socket类,实现原生TCP通信逻辑
  • connect方法传入端口和IP,建立与设备的TCP连接
  • data事件接收设备发送的消息,通过toString()将Buffer转为纯文本
  • close和error事件分别处理连接断开和异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:20:12