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
可能的原因及解决办法
监听地址绑定问题
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未正确关联到当前机器)。验证监听状态
启动Node.js服务后,打印server.address()确认监听的IP和端口是否与配置一致。如果输出地址不是10.0.0.11:3500,说明绑定失败,需检查IP参数是否正确传递。手动测试连接
用telnet 10.0.0.11 3500命令手动发起连接,同时在Node.js的connection事件中添加日志:server.on('connection', (socket) => { console.log('新连接建立:', socket.remoteAddress); // 原数据处理代码 });如果手动连接能触发日志,说明问题出在时钟设备端;否则继续排查Node.js的监听逻辑。
完善错误处理
现有error事件处理代码为空,可能绑定失败时无提示。补充错误日志:server.on('error', (error) => { console.error('服务错误:', error); });启动服务后查看是否有端口占用、IP无法绑定等错误信息。
内容的提问来源于stack exchange,提问作者Jacopo Sciampi
相关产品推荐
相关产品推荐

