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

Java Socket计算出生年份程序退出异常问题求助

问题根源

输入0退出时仍输出2022,核心原因是循环逻辑顺序错误:

  • 客户端输入0后,先将0发送给服务器,再接收返回结果,之后才触发循环退出
  • 服务器收到0后,先计算并返回2022-0,下一次循环判断时才退出

另外还存在一个隐藏问题:客户端连接端口是6246,但服务器监听端口是6807,这会导致连接失败,需一并修正。

修正后的代码

服务器端

调整循环内逻辑,读取年龄后先判断是否为0,是则直接退出,不返回结果:

import java.net.*;
import java.io.*;
import java.util.*;

public class MyEchoServer {
    public static void main(String[] args) throws Exception{
        ServerSocket ss = new ServerSocket(6807);
        
        System.out.println("MyEchoServer is Running");
        System.out.println("Waiting for the client to connect...");
        
        Socket s = ss.accept();
        
        Scanner sc = new Scanner(s.getInputStream());
        PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
        String str="";
        Integer age=1;
        while(age!=0) {
            str=sc.nextLine();
            age = Integer.parseInt(str);
            
            // 年龄为0时直接退出循环,不返回结果
            if(age == 0) {
                break;
            }
            pw.println(2022-age);
        }
        s.close();
    }
}

客户端

输入年龄后先判断是否为0,是则不发送请求,直接退出循环,同时修正端口不匹配问题:

import java.net.*;
import java.io.*;
import java.util.*;

public class MyEchoClient {
    public static void main(String[] args) throws Exception {
        Socket s = new Socket("localhost",6807); // 修正端口与服务器一致
        
        Scanner sc = new Scanner(s.getInputStream());
        PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
        
        Scanner in = new Scanner(System.in);
        
        String str="";
        Integer age=1;
        
        while(age!=0) {
            System.out.println("Enter Age");
            str=in.nextLine();
            age = Integer.parseInt(str);
            
            // 年龄为0时直接退出循环,不发送请求
            if(age == 0) {
                break;
            }
            
            pw.println(age);
            str=sc.nextLine();
            System.out.println(str);
        }
        System.out.println("Exiting...");
        s.close();
    }
}
测试效果

修正后输入0的输出:

Enter Age
10
2012
Enter Age
0
Exiting...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:25:17