6

私のマシンでは、次のコードはEclipse内でコンパイルされますが、Netbeans内で例外がスローされます。エラーメッセージには、「スレッド「メイン」の例外java.net.BindException:アドレスはすでに使用されています」と表示されます。

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

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

    }

}
4

5 に答える 5

4

この問題は、サーバーの1つのインスタンスを実行したままにして、別のインスタンスを開始したことが原因です。

于 2013-02-04T03:23:19.720 に答える
4

私が望むことを達成する方法は、実行したい特定のクラス(例)を右クリックして、Server.java「このファイルを実行する」を選択することです。これにより、サーバーアプリのみを実行できます。次に、他のファイルに対して同じプロセスを実行しますClient.java

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

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

かっこいい、IMO。

于 2013-02-06T14:53:27.840 に答える
0

これをWindowsOSで作成する場合は、「netstat -nao」を使用して、どのプロセスが9999ポートを使用しているかを確認できます。重要でないプロセスの場合は、このプロセスを強制終了できます。それ以外の場合は、プログラムのポートを変更できます。

于 2013-02-04T03:12:34.637 に答える
-1

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

}

上記のコードを参照してください。

于 2018-05-21T01:20:11.653 に答える
-1

私はその方法を試し、catch問題を解決しました。

于 2021-04-04T06:55:07.260 に答える