线程“main”中的异常java.net.BindException:已在使用的地址 – 仅在Netbeans中出错

在我的机器上,以下代码在Eclipse中编译,但在Netbeans中引发异常.错误消息显示“线程中的异常”主“java.net.BindException:已在使用的地址”.

Netbeans中用于编译此代码的正确配置是什么?似乎问题与我有两个主要功能这一事实有关.如果我开始运行其中一个应用程序,第二个将无法启动,抛出上面发布的异常.

Server.java

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

public class Server {

    public static void main(String[] args) throws Exception {

        Server myServ = new Server();
        myServ.run();

    }

    public void run() throws Exception {

        ServerSocket mySS = new ServerSocket(9999);
        Socket SS_accept = mySS.accept();

        InputStreamReader mySR = new InputStreamReader(SS_accept.getInputStream());
        BufferedReader myBR = new BufferedReader(mySR);

        String temp = myBR.readLine();
        System.out.println(temp);

    }

}

Client.java

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

public class Client {

    public static void main(String[] args) throws Exception {

        Client myCli = new Client();
        myCli.run();

    }

    public void run() throws Exception {

        Socket mySkt = new Socket("localhost", 9999);
        PrintStream myPS = new PrintStream(mySkt.getOutputStream());

        myPS.println("Hello server");

    }

}
最佳答案
实现我想要的方法是右键单击要运行的特定类(例如Server.java)并选择“运行此文件”.这使我只能运行服务器应用程序.然后,对另一个文件Client.java执行相同的过程.

然而,在这种特殊情况下,Netbeans有点混乱/欺骗. Netbeans所做的是运行服务器进程,但标签处理为项目名称(例如MyTestNetworkingProject)并在其上放置一个运行编号,从而为我们提供MyTestNetworkingProject运行#1(它实际上省略了#1)第一个过程).然后,如果我转到Client.java文件并选择“运行此文件”,它将生成第二个进程,MyTestNetworkingProject运行#2.然后,它会在屏幕底部生成第二个结果窗口,因为它会在创建新流程时在新选项卡中生成这些窗口.

由于我的特定代码的性质,我希望在结果窗口中看到我确认我的应用程序正在工作,我想观察Server.java结果窗口(在本例中是MyTestNetworkingProject运行#1).鉴于上面列出的运行不同文件的确切步骤顺序,运行#2是最后一个运行过程,因此选项卡位于顶部,覆盖运行#1选项卡.我可以点击运行#1并查看我希望在控制台中看到的结果(“Hello服务器”),但我只需要知道/记住MyTestNetworkingProject运行#1代表Server应用程序而不是Client应用程序.

Uncool,IMO.

转载注明原文:线程“main”中的异常java.net.BindException:已在使用的地址 – 仅在Netbeans中出错 - 代码日志