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

Java Socket编程启动服务端/客户端报JVM_Bind端口占用错误求解决

错误原因

java.net.BindException: Address already in use: JVM_Bind 报错的核心原因是你代码中使用的2020端口已经被其他进程占用,常见场景包括:

  • 之前运行的Server进程没有正常关闭,残留在后台占用端口
  • 同一时间启动了多个Server实例,重复绑定同一个端口
  • 上次程序运行结束后端口处于TIME_WAIT状态,暂时无法重新绑定

你提到Client运行也报相同错误,大概率是你误启动了多个Server实例,或者之前的Server进程没有关闭,Client本身的逻辑是连接端口而非绑定端口,正常不会触发该报错。

修复方案

第一步:清理占用2020端口的进程

根据你使用的操作系统执行对应操作:

  • Windows系统:
    1. 按下Win+R输入cmd打开命令提示符
    2. 执行命令netstat -ano | findstr :2020,查询结果最后一列就是占用端口的进程PID
    3. 执行命令taskkill /PID 你查询到的PID /F,强制结束该进程
  • Mac/Linux系统:
    1. 打开终端
    2. 执行命令lsof -i:2020,查询结果中PID列就是占用端口的进程ID
    3. 执行命令kill -9 你查询到的PID,强制结束该进程

你也可以直接打开IDEA的运行控制台,把所有已经启动的Server、Client进程全部点停止按钮关闭,也能清理残留进程。

第二步:优化代码避免后续重复出现问题

你当前的Server代码存在两个缺陷,很容易触发端口占用问题,按如下修改即可:

  1. 新增端口复用配置,避免TIME_WAIT状态导致绑定失败
  2. 程序运行结束后主动关闭ServerSocket,释放端口
    修改后的Server构造方法代码如下:
public Server() throws IOException {
    ServerSocket server_socket = new ServerSocket();
    // 开启端口复用,解决短时间内重启服务绑定失败的问题
    server_socket.setReuseAddress(true);
    server_socket.bind(new java.net.InetSocketAddress(2020));//绑定2020端口
    System.out.println("port 2020 has been opened!");

    Socket socket=server_socket.accept();
    System.out.println("Client "+socket.getInetAddress()+" has connected");

    BufferedReader in_socket=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter out_socket=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);

    out_socket.println("Welcome");//send "welcome" to client
    String message=in_socket.readLine();
    System.out.println("Client says "+message);

    // 先后关闭客户端连接、服务端Socket,彻底释放端口
    socket.close();
    server_socket.close();
    System.out.println("Socket is closed");
}

第三步:按正确顺序运行程序

  1. 先运行Server类,等待控制台打印port 2020 has been opened!,说明服务端启动成功
  2. 再运行Client类,即可正常完成通信

内容的提问来源于stack exchange,提问作者tecs-x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:15:02