线程“main”中出现异常,地址已在使用中-仅在Netbeans中出错

wko9yo5t  于 2023-01-13  发布在  其他
关注(0)|答案(6)|浏览(261)

在我的机器上,以下代码在Eclipse中编译,但在Netbeans中抛出异常,错误消息为“线程“main”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");

    }

}
oprakyz7

oprakyz71#

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

von4xj4u

von4xj4u2#

实现我想要的方法是右键单击我想要运行的特定类(例如Server.java)并选择“Run this file”。这使我能够只运行服务器应用程序。然后,对另一个文件Client.java执行相同的过程。
然而,Netbeans在这种特殊的情况下有点令人困惑/欺骗。Netbeans所做的是运行Server进程,但将该进程标记为项目的名称(例如MyTestNetworkingProject),并在其上放置一个运行编号,从而为我们提供MyTestNetworkingProject run #1(它实际上忽略了第一个进程上的#1)Client.java。运行此文件”“,它会生成第二个进程MyTestNetworkingProject run #2。然后,它会在屏幕底部生成第二个结果窗口,因为它会在创建新进程时在新选项卡中生成这些结果。
由于我的特定代码的性质,我希望在结果窗口中看到的是www.example.com结果窗口,以确认我的应用程序正在运行Server.java(在本例中为MyTestNetworkingProject run #1)。根据我上面列出的运行不同文件的确切步骤顺序,运行#2是最后一个运行进程,因此是顶部的选项卡,我可以点击运行#1,然后在控制台中看到我希望看到的结果(“Hello server”),但我只需要知道/记住MyTestNetworkingProject run #1代表的是服务器应用程序,而不是客户端应用程序。
不酷,海事组织。

zlhcx6iw

zlhcx6iw3#

如果你在Windows操作系统下写这个程序,你可以用“netstat -nao”来查看哪个进程使用9999端口。如果是一些不重要的进程,你可以杀死这个进程。否则你可以改变程序的端口。

pepwfjgg

pepwfjgg4#

我更改了端口地址,它在Neat Beans IDE中为我工作。如果我们多次使用相同的端口地址,则会出现此问题。因此,要修复此错误,您必须更改端口地址,我确信它会工作

k2fxgqgv

k2fxgqgv5#

Server.java

public class SocServer {

    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(5001);
            Socket client = server.accept();
            DataOutputStream os = new DataOutputStream(client.getOutputStream());
            os.writeBytes("Hello Sockets\n");
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Client.java

public class SocClient {

    public static void main(String[] args) {
        try {
            Socket socClient = new Socket("localhost", 5001);
            InputStream is = socClient.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String receivedData = br.readLine();
            System.out.println("Received Data: " + receivedData);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

参考上面的代码,它为我工作。

9vw9lbht

9vw9lbht6#

我确实尝试了catch方法,解决了这个问题。

相关问题