Java Socket编程服务端无响应 无法正常接收客户端消息问题求助
问题根因
问题核心是客户端的PrintWriter没有触发缓冲区刷新,发送的消息一直滞留在客户端本地缓冲区,没有实际通过Socket发送到服务端,所以服务端的in.readLine()会一直阻塞等待数据。
具体差异点:
- 服务端初始化PrintWriter时添加了第二个参数
true,开启了自动刷新,所以服务端回写大写数据的逻辑是正常的 - 客户端初始化PrintWriter时没有设置自动刷新参数,而
println()方法只有在开启自动刷新的前提下才会自动刷出缓冲区内容,你当前写完数据后没有手动触发刷新,所以消息一直没有发出去
修复方案
两种方案选其一即可:
方案1:客户端开启PrintWriter自动刷新
修改客户端的PrintWriter初始化代码,添加第二个参数true开启自动刷新:
PrintWriter out=new PrintWriter(s.getOutputStream(), true);
方案2:客户端发送完数据后手动刷缓冲区
如果不想开启自动刷新,在out.println(txt);之后添加手动刷新代码:
out.println(txt); out.flush(); // 新增这行,强制把缓冲区内容发送到服务端 System.out.println("string sent");
补充注意点
- 你当前服务端注释了while循环,只能处理单次客户端请求,后续如果需要支持多客户端连接,可以打开循环注释,每次收到客户端连接后新开线程处理,避免单线程阻塞后续请求
Scanner.next()只会读取到空格为止,如果需要输入带空格的整行文本,建议替换为scan.nextLine()
内容的提问来源于stack exchange,提问作者user2019215
相关产品推荐
相关产品推荐

