0

Java で単純なクライアント サーバー アプリケーションを作成しました。サーバーでクライアントを実行しようとすると、以下の例外が発生します。スレッド「メイン」での例外 java.net.BindException: アドレスは既に使用されています: java.net.DualStackPlainSocketImpl.bind0 の JVM_Bind (ネイティブ メソッド) java.net.DualStackPlainSocketImpl.socketBind (未知のソース) の java.net.AbstractPlainSocketImpl.bind (不明なソース) java.net.PlainSocketImpl.bind で(不明なソース) java.net.ServerSocket.bind で(不明なソース) java.net.ServerSocket.(不明なソース) で java.net.ServerSocket.(不明なソース) DateServer.main(DateServer.java:8) で

すべてのjarファイルを追加して、コードを実行するためにこの例外を削除する方法をすべてチェックしました。

import java.util.Scanner;
import java.net.Socket;

class DateClient {
public static void main(String[] args) throws java.io.IOException {
    String host = "localhost";
    int port = Integer.parseInt("415");
    Socket server = new Socket(host, port);
    Scanner scan = new Scanner(server.getInputStream());
    System.out.println(scan.nextLine());
}

}

import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

class DateServer {
public static void main(String[] args) throws java.io.IOException {
    ServerSocket s = new ServerSocket(415);
    while (true) {
        Socket incoming = s.accept();
        System.out.println(incoming);
        PrintWriter toClient = new PrintWriter(incoming.getOutputStream());
        toClient.println(new Date());
        toClient.flush();
        incoming.close();
    }
}

}

4

3 に答える 3

0

私はこの問題をかなりの回数受けました。おそらくサーバーのソケットには、使用中またはbound別のプロセスによって指定されたポートがまだ残っています(私の場合、適切に強制終了されなかった以前のバージョンのサーバー実行が常にあります-私はそうするか、どちらを実行しますCtrl-CCtrl-Zプロセスを適切に強制終了しません)。

コマンドkill %1または別のコマンドを実行して、以前のプロセスの実行を完全に削除してください。これは通常私にとってはうまくいきます!:) 幸運を!

于 2013-11-11T04:33:51.547 に答える
0

使用中または空きであることを知らずに、ランダムなポートを使用することはできません。

netstat -an を使用して、使用中のポートを確認し、空いているポートの 1 つを使用します。(Windows の場合は、cmd で netstat -an を使用します)

編集: 以下のリンクを見てください。これらのいずれかが役立つはずです 。「java.net.BindException: Address already in use: JVM_Bind」エラーを解決するにはどうすればよいですか?

アドレスはすでに使用されています: JVM_Bind

于 2013-11-11T04:34:27.843 に答える
0

API によると、BindException

Signals that an error occurred while attempting to bind a socket to a local address and port. Typically, the port is in use, or the requested local address could not be assigned

基本的に、そのポートは別のプロセスによって使用されている可能性があります。おそらく、同じアプリケーションの別のインスタンスによって、クリーンでないシャットダウンが原因である可能性もあります。このリンクは、トラブルシューティングに役立つ場合があります。

ノート:

netstat -an コマンドを実行して投稿された結果は、ポート 8085 が複数のプロセスで使用されていることを確認しているようで、その結果、BindException が発生します。

于 2013-11-11T04:29:27.710 に答える