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

Node.js TCP服务无法接收S800时钟连接问题求助

Node.js TCP服务无法触发connection事件(同IP端口下C#代码可正常运行)

我有一段可正常运行的C# TcpListener代码,能够接收S800/ID+W时钟的连接与数据。但用Node.js实现相同功能时,服务能正常启动,但connection事件从未触发,无法接收任何连接或消息。

可正常运行的C#代码

if (tcp == null)
{
    this.tcp = new TcpListener(IPAddress.Parse(serverIP), port);
}
this.tcp.Start();
listening = true;
while (listening)
{
    Socket mySocket = null;
    try
    {
        mySocket = this.tcp.AcceptSocket();
        Thread.Sleep(500);
        byte[] bReceive = new byte[1024 * 1024 * 2];
        mySocket.Receive(bReceive);
        Analysis(bReceive, mySocket);
    }
    catch
    {
        // ... 省略异常处理代码
    }
}
this.tcp.Stop();

Node.js实现代码(connection事件未触发)

const net = require('net');

// ... 省略其他代码

server = net.createServer();

server.on('connection', (socket) => {
    // 从未触发此处
    debugger;
    socket.on('data', (data) => {
        setTimeout(() => {
            analysis(data, socket);
        }, 500);
    });
});

server.listen(port, serverIP, () => {
    console.log('Server listening on', server.address());
});

server.on('error', (error) => {
  // ... 省略错误处理代码
});

补充信息

  • 使用的IP是以太网网卡地址(来自ipconfig /all):10.0.0.11,端口为空闲的3500
  • 已关闭防火墙,无代理等连接限制
  • 同一IP和端口下,C#程序可正常接收时钟设备的连接与数据
  • 时钟端已配置Server address为10.0.0.11,Server port为3500

可能的原因及解决办法

  1. 监听地址绑定问题
    C#的TcpListener绑定指定IP时可正常监听对应网卡,但Node.js如果绑定具体IP失败,会导致无法接收连接。可以尝试改为监听所有网卡地址0.0.0.0测试:

    server.listen(port, '0.0.0.0', () => {
        console.log('Server listening on', server.address());
    });
    

    如果此方式能触发connection事件,说明原指定的10.0.0.11存在绑定异常(比如网卡状态变化、IP未正确关联到当前机器)。

  2. 验证监听状态
    启动Node.js服务后,打印server.address()确认监听的IP和端口是否与配置一致。如果输出地址不是10.0.0.11:3500,说明绑定失败,需检查IP参数是否正确传递。

  3. 手动测试连接
    用telnet 10.0.0.11 3500命令手动发起连接,同时在Node.js的connection事件中添加日志:

    server.on('connection', (socket) => {
        console.log('新连接建立:', socket.remoteAddress);
        // 原数据处理代码
    });
    

    如果手动连接能触发日志,说明问题出在时钟设备端;否则继续排查Node.js的监听逻辑。

  4. 完善错误处理
    现有error事件处理代码为空,可能绑定失败时无提示。补充错误日志:

    server.on('error', (error) => {
        console.error('服务错误:', error);
    });
    

    启动服务后查看是否有端口占用、IP无法绑定等错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:49:55