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

跨设备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等发行版)或对应防火墙命令开放端口。
  • 验证网络连通性:

    1. 在发送端电脑执行ping 192.168.x.x,测试两台电脑是否在同一局域网且能互通。如果ping不通,检查两台设备是否连接同一网络(WiFi/以太网),或路由器是否开启了设备隔离。
    2. 如果ping通,再用telnet 192.168.x.x 5000测试端口是否开放,若连接失败,说明端口仍被拦截,回到防火墙设置排查。
  • 关于是否切换到Socket编程:暂时不需要。当前HTTP API(Flask+Axios)的方案已经能满足单向数据传输的需求,解决连接问题后即可正常使用。Socket编程更适合需要实时双向通信的场景(比如聊天、实时监控),如果你的需求只是简单的数据传输,HTTP方案更简单易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:47:44