6

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

    }

}

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

    }

}
4

5 回答 5

4

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

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

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

不酷,海事组织。

于 2013-02-06T14:53:27.840 回答
4

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

于 2013-02-04T03:23:19.720 回答
0

如果你是在windows系统下写的,你可以使用netstat -nao来查看哪个进程使用了​​9999端口。如果是不重要的进程,你可以杀掉这个进程。否则你可以改变程序的端口。

于 2013-02-04T03:12:34.637 回答
-1

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

于 2021-04-04T06:55:07.260 回答
-1

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

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

}

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

于 2018-05-21T01:20:11.653 回答