当前位置: 首页 > news >正文

​​IPerf工具使用笔记(基于MobaXterm串口终端)​

​一、问题现象​

  1. ​终端输入无响应​

    • 启动iperf服务器后,终端被阻塞,无法输入其他命令(如图中重复输出日志覆盖输入区域)。
    • ​直接原因​​:iperf_server线程未正确处理退出标志,导致selectaccept长期阻塞。
  2. ​重复绑定端口日志​

    • 终端频繁输出本地端口号是5001,表明:
      • 服务器套接字未正确关闭,重复初始化。
      • 端口被其他进程占用(可能因异常退出导致)。
  3. ​无法通过iperf --stop终止服务​

    • 全局标志param.mode未触发线程退出循环。
​二、根本原因​
  1. ​代码逻辑缺陷​

    • iperf_serverselect调用阻塞时间过长(默认3秒),未及时检测退出标志。
    • 未强制关闭套接字,导致线程卡在acceptselect
  2. ​资源未释放​

    • 异常退出时,套接字未关闭,端口未释放,重启时触发bind错误。
  3. ​终端配置问题​

    • MobaXterm未启用本地回显(Local Echo),输入内容被日志覆盖。
​三、解决方案​
​1. 代码修复(关键修改)​
// 修改iperf_server循环逻辑
void iperf_server(void *thread_param) {
    struct timeval timeout;
    timeout.tv_sec = 1;  // 缩短超时时间至1秒

    while (param.mode != IPERF_MODE_STOP) {
        // 每次循环重置超时
        timeout.tv_sec = 1;
        FD_SET(sock, &readset);
        ret = select(sock + 1, &readset, NULL, NULL, &timeout);
        
        if (ret == -1 || param.mode == IPERF_MODE_STOP) 
            break;  // 及时退出
        
        // 处理连接...
    }

    // 强制关闭套接字(避免阻塞)
    if (sock >= 0) {
        shutdown(sock, SHUT_RDWR);
        closesocket(sock);
    }
}
​2. 命令行操作​
操作命令说明
​启动服务器​iperf -s -p 5001 &&后台运行,避免阻塞终端
​停止服务器​iperf --stop 或 killall iperf全局标志触发退出或强制终止进程
​验证端口监听​`netstat -angrep 5001`
​3. MobaXterm配置​
  1. ​启用本地回显​

    • 右键终端 → ​​Settings​​ → ​​Terminal​​ → 勾选:
      • ✅ ​​Local echo​
      • ✅ ​​Local line editing​
  2. ​串口参数​

    • 波特率:115200
    • 数据位:8,停止位:1,无流控
    • 设备路径:COM7 (USB-SERIAL CH340)(需根据系统识别调整)
​四、操作流程​
  1. ​启动服务器​

    iperf -s -p 5001 &  # 后台启动
    • ​预期输出​​:[1] 12345(进程ID)和单次本地端口号是5001
  2. ​客户端测试​
    在其他设备执行:

    iperf -c 192.168.16.112 -p 5001  # 替换为MCU的IP
    • ​成功标志​​:服务端打印客户端连接信息及带宽。
  3. ​终止服务器​

    iperf --stop  # 或 kill -9 [进程ID]
    • ​验证​​:ps | grep iperf无结果,netstat显示端口释放。
​五、注意事项​
  1. ​硬件连接​

    • 确保USB转串口线(CH340)稳定连接,避免频繁插拔导致COM口失效。
  2. ​线程优先级​

    • 调整RTOS线程优先级,避免iperf占用过高优先级阻塞终端任务:
      sys_thread_new("iperf", iperf_server, NULL, 2048, 3);  // 优先级设为3(低于默认)
  3. ​内存泄漏​

    • 使用pvPortMallocvPortFree确保内存释放,添加分配失败检查:
      if (!send_buf) {
          printf("内存不足!\n");
          return;
      }

​六、故障排查表​
现象检查点解决措施
终端输入无响应是否后台运行?jobs命令查看使用fg切前台后Ctrl+C终止
端口绑定失败端口是否被占用?netstat检查更换端口或重启设备
客户端无法连接防火墙/路由设置,IP是否正确关闭防火墙,检查子网掩码

通过以上整理,可系统化解决iperf在MobaXterm串口终端中的使用问题,确保服务器可控运行及终端输入正常。

相关文章:

  • 页面编辑器CodeMirror初始化不显示行号或文本内容
  • docker内安装达梦8数据库
  • PhotoShop学习09
  • 设计模式:单例模式
  • AI大模型与知识生态:重构认知的新时代引擎
  • 将mongdb中文档转储到mysql设计思路
  • 众趣科技丨沉浸式 VR 体验,助力酒店民宿数字化营销宣传
  • Maya云渲染工作流,提升渲染速度
  • C++蓝桥杯填空题(攻克版)
  • NLP高频面试题(三十八)——什么是LLM的灾难性遗忘?如何避免灾难性遗忘?
  • C++手写std::function
  • Three.js关键帧动画不连续正放、倒放出现的部分问题
  • 【PVR Review】《A Review of Palmar Vein Recognition》
  • atypica.AI:用「语言模型」为「主观世界」建模
  • Redis的哨兵
  • 深度学习基础--CNN经典网络之分组卷积与ResNext网络实验探究(pytorch复现)
  • EasyX 图形库学习笔记
  • c#程序结构
  • 单北斗终端:铸就国产科技脊梁
  • 告别 ifconfig:为什么现代 Linux 系统推荐使用 ip 命令
  • 搭建vpn访问国外网站/哪些平台可以免费发布产品
  • 厦门做网站公司哪家好/守游网络推广平台
  • 建公司网站哪家好/百度seo引流
  • 手机建网站步骤软件/创建免费网站
  • 东莞哪些网络公司做网站比较好/链接下载
  • 啥网站都能看的浏览器/产品推广方案范例