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

Java Socket多客户端服务器接入新客户端后旧客户端响应异常问题咨询

问题原因

  • 核心问题是Helper类中的br、bw、output三个成员使用了static关键字修饰,属于类全局共享变量,所有Helper线程实例共用同一份引用,每次新客户端接入就会覆盖旧的流对象。
  • 客户端逻辑设计为先等待服务器发送set指令,再发送用户输入。新客户端接入时,Helper构造方法会将br和bw替换为新客户端的输入输出流。如果此时旧客户端对应的线程刚好已经完成了上一轮set指令的发送,旧客户端就能收到这最后一次指令,发送最后一条消息。之后旧线程所有的set指令都会发给最新接入的客户端,旧客户端再也收不到set指令,就会一直卡在等待服务器消息的br.readLine()步骤,用户输入的内容无法发送到服务器,看起来就像服务器停止响应了。

修复方案

把Helper类中三个成员的static修饰符删除,改为实例级变量,每个客户端对应线程独立持有自己的输入输出流,互不干扰即可:

public class Helper extends Thread {
    // 去掉static修饰,改为实例成员
    public BufferedReader br;
    public BufferedWriter bw;
    public String output = "";

    // 剩余逻辑无需修改
    ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:04