Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.net.BindException:地址已在使用中-仅在Netbeans中出错_Java_Netbeans - Fatal编程技术网

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

“线程中的异常”;“主要”;java.net.BindException:地址已在使用中-仅在Netbeans中出错,java,netbeans,Java,Netbeans,在我的机器上,以下代码在Eclipse中编译,但在Netbeans中引发异常。错误消息显示“线程中的异常”main“java.net.BindException:地址已在使用” Netbeans中使代码编译的正确配置是什么?问题似乎与我有两个主要功能有关。如果我开始运行其中一个应用程序,第二个应用程序将无法启动,引发上面发布的异常 Server.java import java.io.*; import java.net.*; public class Server { public

在我的机器上,以下代码在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);

    }

}
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

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");

    }

}
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();
        }
    }

}

如果你在Windows操作系统中写这个,你可以使用“netstat-nao”来查看哪个进程使用9999端口,您可以终止此进程。否则,您可以更改pragram的端口。

问题是您让服务器的一个实例运行,然后启动了另一个实例。

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

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

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

Uncool,IMO.

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);

    }

}
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

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");

    }

}
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();
        }
    }

}

参考上面的代码,它对我有效

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

确保只在Eclipse或NetBeans中运行
Server
类。否则,如果要同时运行两台服务器,请更改端口号。如果不在Netbeans中,我应该在哪里运行客户端应用程序?另外,这两台服务器是什么意思?只有一个服务器应用程序。您在eclipse上运行的是哪个类,在netbeans上运行的是哪个类?不,不……我试图在netbeans上开发它(两个类)。当我遇到麻烦时,我转向Eclipse,在那里开发了这两个类,我没有任何问题。所以我的问题是…在Netbeans中,如何成功运行这两个类/应用程序?如果您查看代码,一旦服务器应用程序运行,客户端应用程序就可以启动,并使用套接字与服务器应用程序交互。我尝试了各种端口号,结果相同。另外,我的操作系统是linux。我知道如何手动杀死Netbeans中的进程,所以我认为这不是问题所在。事实上,我甚至完全关闭IDE并重新启动。也许我没有正确启动我的应用程序?当您使用
publicstaticvoidmain(String[]args)
运行2个或更多类时,Eclipse控制台中会出现类似情况。我不认为这是IDE的问题。尽管存在明显的套接字泄漏,但它确实可以为您工作,但它并不能以任何方式回答这个问题。