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

TCP客户端-服务端程序中服务端FileDownload代码块重复执行问题排查求助

问题分析与修复方案

看起来你遇到的核心问题是客户端重复发送了FileDownload指令,导致服务端对应的代码块执行了两次。让我帮你拆解一下问题根源,再给出修复方案:

问题根源:客户端重复发送请求

看你的客户端主循环代码:

while(true) {
    String msg="", received="";
    String length;
    msg = sc.nextLine();
    pw.println(msg); // 第一次发送请求
    if(msg.equals("END")) break;
    if(poraka.equals("Hello")) { // 这里还有个笔误:poraka应该是msg
        // ... Hello逻辑处理
    } else if(msg.contains("FileDownload")) {
        System.out.println("FileDownload-Start");
        pw.println(msg); // 第二次重复发送了相同的请求!
        // ... 后续下载逻辑
    }
}

你在循环开头已经通过pw.println(msg)发送了一次FileDownload指令,但在分支内部又再次调用了pw.println(msg),等于给服务端发了两次一模一样的请求。服务端的while(true)循环会连续读取到这两次请求,自然会执行两次FileDownload的处理逻辑,导致重复发送文件数据。

修复步骤

  1. 删除重复的发送语句:直接删掉else if(msg.contains("FileDownload"))分支里的pw.println(msg),只保留循环开头的那一次发送即可。
  2. 修正笔误:把poraka.equals("Hello")改成msg.equals("Hello"),否则Hello分支永远不会被触发。
  3. 完善文件读写逻辑:当前代码只读取一次1024字节,大文件会丢失内容,建议循环读取直到文件结束;同时记得关闭IO流避免资源泄漏。

修复后的客户端核心代码片段

else if(msg.contains("FileDownload")) {
    System.out.println("FileDownload-Start");
    byte[] b=new byte[1024];
    File file=new File(reader.readLine().trim());
    System.out.println(file.getName().trim());
    FileOutputStream fo=new FileOutputStream("D:\\Eclipse WorkSpace\\proekt\\src\\client\\"+file.getName().trim());
    System.out.println("file: "+file.getName().trim());
    
    // 循环读取完整文件内容
    int bytesRead;
    while ((bytesRead = in.read(b)) != -1) {
        fo.write(b, 0, bytesRead);
    }
    
    fo.close(); // 关闭输出流
    System.out.println("FileDownload-End");
}

服务端的小优化建议

服务端读取文件时也存在同样的不完整问题,建议修改为循环读取:

if(j>0 && j<s.length) {
    FileInputStream fi=new FileInputStream(s[j]);
    byte[] b=new byte[1024];
    System.out.println("file: "+s[j]);
    pw.println(s[j]);
    
    // 循环发送完整文件
    int bytesRead;
    while ((bytesRead = fi.read(b)) != -1) {
        out.write(b, 0, bytesRead);
    }
    
    fi.close(); // 关闭输入流
    System.out.println("FileDownload-End");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:07:47