跨设备Node.js向Python Flask传数据遇ECONNREFUSED错误求助
问题描述
我有一个Node.js后端,希望通过API向运行Python接收程序的远程电脑传输数据。同机运行时一切正常,但跨机运行时出现连接被拒绝的错误,试过ChatGPT和YouTube视频的方法都没用,作为网络新手,纠结是否要切换到Socket编程。
注:192.168.x.x是接收端电脑以太网适配器Ethernet 3的IPv4地址,目标是接收另一台电脑Node.js发送的数据。
接收端Python代码
from flask import Flask, jsonify, request app = Flask(__name__) # 创建Flask应用实例 @app.route('/api', methods=['GET']) # 定义API路由 def get_data(): return jsonify({'message': 'Hello from the API!'}) # 返回JSON响应 if __name__ == '__main__': app.run(host='192.168.x.x', debug=True)
发送端Node.js代码
const axios = require('axios'); axios.get('http://192.168.x.x:5000/api') .then(response => { console.log(response.data); }) .catch(error => { console.error(error); });
跨机运行错误信息
cause: Error: connect ECONNREFUSED 192.168.x.x:5000 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1247:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '192.168.x.x', port: 5000 }
排查与解决建议
修正Flask的监听地址:把接收端Flask代码里的
host参数改成'0.0.0.0',这样服务会监听电脑上所有可用的网络接口,避免因指定单一IP导致的访问限制。修改后的启动代码:if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)检查接收端防火墙设置:这是最常见的原因。系统或第三方防火墙会默认阻止外部对5000端口的访问,需要手动添加规则:
- Windows:打开「Windows Defender防火墙」→「高级设置」→「入站规则」→「新建规则」,选择「端口」,指定TCP端口5000,允许连接后完成规则创建;也可以直接允许Python程序通过防火墙。
- Linux/macOS:用
ufw allow 5000/tcp(Ubuntu等发行版)或对应防火墙命令开放端口。
验证网络连通性:
- 在发送端电脑执行
ping 192.168.x.x,测试两台电脑是否在同一局域网且能互通。如果ping不通,检查两台设备是否连接同一网络(WiFi/以太网),或路由器是否开启了设备隔离。 - 如果ping通,再用
telnet 192.168.x.x 5000测试端口是否开放,若连接失败,说明端口仍被拦截,回到防火墙设置排查。
- 在发送端电脑执行
关于是否切换到Socket编程:暂时不需要。当前HTTP API(Flask+Axios)的方案已经能满足单向数据传输的需求,解决连接问题后即可正常使用。Socket编程更适合需要实时双向通信的场景(比如聊天、实时监控),如果你的需求只是简单的数据传输,HTTP方案更简单易维护。
内容的提问来源于stack exchange,提问作者kodas
相关产品推荐
相关产品推荐

