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

nai*_*are 5 java netbeans

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

Netbeans中正确的配置是什么才能使此代码编译?问题似乎与我有两个主要职能有关。如果我开始运行其中一个应用程序,则第二个应用程序将无法启动,并引发上述异常。

服务器.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);

    }

}
Run Code Online (Sandbox Code Playgroud)

客户端.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");

    }

}
Run Code Online (Sandbox Code Playgroud)

use*_*421 5

问题是由于您让服务器的一个实例保持运行状态,然后启动了另一个实例。


nai*_*are 4

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

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

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

不酷,国际海事组织。