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

Java多线程Client-Server猜数字游戏客户端while循环无法退出问题

问题根因

  • 客户端的while(true)属于无条件无限循环,没有设置任何跳出规则,即便收到猜对的响应,也会继续执行输入数字的提示逻辑
  • 服务端每次收到客户端的猜测请求,都会固定返回2行消息:第一行是猜测结果提示,第二行是固定的Size = X格式的长度统计反馈,当前客户端只会直接打印这两行响应,不会根据第一行的结果内容判断游戏是否结束。

修复方案

1. 调整客户端逻辑,新增游戏结束判断

只要收到的第一行响应包含BRAVO(猜对标识)或者Le jeu est terminé(游戏结束标识)关键词,就完成资源回收后跳出循环:

while(true) {   
    System.out.println("请输入您猜测的数字:");
    String req=scanner.nextLine();
    pw.println(req);
    
    String resultHint = br.readLine();
    System.out.println(resultHint);
    
    String sizeMsg = br.readLine();
    System.out.println(sizeMsg);   
    
    // 新增游戏终止判断逻辑
    if (resultHint.contains("BRAVO") || resultHint.contains("Le jeu est terminé")) {
        // 关闭所有IO资源后退出循环
        scanner.close();
        br.close();
        pw.close();
        break;
    }
}

2. 可选优化:服务端逻辑调整(非必需,可提升资源利用率)

当前服务端即使用户猜对后,依然会保持和该客户端的连接,继续接收后续请求并返回游戏结束提示。如果希望猜对后直接断开连接回收资源,可以修改服务端猜对分支的逻辑:

else {
    gagnant=nom;
    pw.println("BRAVO " + nom + " !!!! Le nombre secret était " + nombreSecret + " ... Vous êtes le vainqueur");
    fin=true;
    // 先按原有规则发送长度统计消息,再关闭资源断开连接
    pw.println("Size = "+req.length());
    pw.flush();
    pw.close();
    br.close();
    break; // 跳出当前客户端的请求处理循环
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:36:04