1. ホーム
  2. java

[解決済み] スレッド "main" で例外 java.net.BindException: アドレスはすでに使用されています - Netbeans でのエラーのみ

2022-01-30 22:20:26

質問

私のマシンでは、次のコードはEclipseでコンパイルされますが、Netbeansでは例外がスローされます。 エラーメッセージには、"Exception in thread "main" java.net.BindException.Exception と書かれています。Address already in use"とあります。

このコードをコンパイルするためのNetbeans内の適切な構成は何ですか? 問題は、私が2つの主要な関数を持っているという事実と関係があるように思われます。 どちらかのアプリを実行し始めると、2番目のアプリは起動に失敗し、上記の例外がスローされます。

サーバー.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");

    }

}

解決方法は?

私が望むことを実現する方法は、特定のクラス(ex. Server.java を選択し、[このファイルを実行]を選択します。 これにより、Serverアプリのみを実行することができます。 次に、もう1つのファイルに対して同じ処理を行います。 Client.java .

しかし、この特殊な状況において、Netbeansはやや混乱/欺瞞的である。 Netbeansが行うのは Server プロセスを作成しますが、そのプロセスにプロジェクト名 (例: MyTestNetworkingProject) のラベルを付け、実行番号を付けることで、このプロセスを作成します。 MyTestNetworkingProject run #1 (実際には、最初のプロセスの#1が省かれています)。 次に、Client.java ファイルに移動して "このファイルを実行" を選択すると、2番目のプロセスが生成されます。 MyTestNetworkingProject run #2 . 新しいプロセスが作成されると新しいタブでこれらを生成するため、画面の下部に2つ目の結果ウィンドウが生成されます。

私の特定のコードの性質上、私のアプリケーションが動作していることを確認するために結果ウィンドウを観察したかったのは、Server.javaの結果ウィンドウ(この場合、これは MyTestNetworkingProject run #1 ). 上記の手順で異なるファイルを実行した場合、run #2は最後の実行プロセスであるため、run #1タブを覆うように上部のタブが表示されます。 run #1をクリックすると、コンソールに期待した結果("Hello server")を見ることができますが、次のことを知る/覚えておく必要があります。 MyTestNetworkingProject run #1 は、クライアントアプリではなく、サーバーアプリを表しています。

Uncool, IMO.