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

Rust电梯项目初始化遇Connection Refused错误求助

Rust电梯项目初始化时Connection Refused Panic问题

背景

我是Rust新手,正在将上学期用Go编写的三台电梯实时控制课程项目移植到Rust中。项目要求零服务中断,但在初始化课程提供的硬件驱动和网络驱动时触发panic,错误信息如下:

Os { code: 61, kind: ConnectionRefused, message: "Connection refused" }

已尝试以下无效解决方案:

  • 关闭macOS防火墙
  • 将localhost替换为127.0.0.1

开发环境:2021款MacBook Pro(Apple M1 Pro,16GB内存,macOS Sequoia 15.0.1),最终将部署到Ubuntu 22系统。已准备好最小复现代码及完整回溯信息。


排查解决思路

  1. 确认目标服务状态
    • 用lsof -i :<目标端口>或netstat -an | grep <目标端口>检查代码中连接的端口是否有服务监听。如果是课程提供的模拟驱动服务,先确认它已正常启动,无崩溃或配置错误。
  2. 核对连接配置一致性
    • 对比Go版本项目的连接参数,确保Rust代码使用的IP、端口和Go版本完全一致,避免硬编码或环境变量读取错误。
  3. 处理M1架构兼容性
    • 课程驱动可能为x86架构编译,尝试用Rosetta 2运行驱动或Rust程序(终端右键选择「使用Rosetta打开」后执行命令),排查架构不兼容导致的连接失败。
  4. 优化初始化逻辑与错误处理
    • 检查Rust代码中网络驱动的初始化顺序:是否存在服务端未完全启动就发起连接的情况?参考Go版本的重试逻辑,给Rust代码添加带指数退避的连接重试机制,避免因启动延迟导致的单次连接失败触发panic。
    • 将直接panic的逻辑改为返回Result,在调用层处理错误并重试,符合项目零中断的要求。
  5. 跨环境预验证
    • 在Ubuntu 22环境中用telnet <地址> <端口>或nc -zv <地址> <端口>测试端口连通性,排除MacOS特有的网络规则问题。
  6. 定位具体问题点
    • 从panic回溯信息中找到触发连接的代码位置,确认是硬件驱动内部连接还是外部网络连接,针对性排查对应服务的启动状态或配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:59:50