4

http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.htmlでUDPチュートリアルに従っています。すべてのコードをコピーしてコンパイルしました。最初にクライアントをコンパイルし、次にサーバーをコンパイルすると、 、サーバーはこれをコンソールに出力します

Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at QuoteServerThread.<init>(QuoteServerThread.java:19)
at MulticastServerThread.<init>(MulticastServerThread.java:10)
at MulticastServer.main(MulticastServer.java:3)

QuoteServerThreadの19行目は

socket = new DatagramSocket(12345);

MulticastServerThreadの10行目は

public MulticastServerThread() throws IOException {
    super("MulticastServerThread"); // line 10
}

MulticastServerの3行目は

public class MulticastServer {
    public static void main(String[] args) throws java.io.IOException {
        new MulticastServerThread().start(); // line 3
    }
}

最初にサーバーを起動し、次にクライアントを起動すると、クライアントはこれをコンソールに出力します

Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at MulticastClient.main(MulticastClient.java:9)

MulticastClientの9行目は

MulticastSocket socket = new MulticastSocket(12345);

エラーを見ると、ポートのリッスンと関係があるように見えますが、どうすれば修正できますか?

キャンバス

4

4 に答える 4

5

これは、サーバーのインスタンスを既に実行しているためと考えられます。特定のポートで一度にリッスンできるサーバーは 1 つだけです。インスタンスを既に実行しているかどうかを確認し (Eclipse を使用している場合は、コマンド ウィンドウにこれが表示されるはずです)、別のインスタンスを実行する前にインスタンスを終了します。

ストリームが適切にシャットダウンされなかった可能性もありますが。IDE を実行している場合は、IDE を再起動すると問題が解決するはずですが、コンピューターを再起動する必要がある場合もあります。おそらくこれを修正するためのより良い解決策ですが、それが私にとってはうまくいきました。

于 2013-02-26T18:12:29.223 に答える
0

You can do the following:

Use netstat coomand to view which application is using that port. Then use tasklist and taskkill to kill the application at that port.

于 2013-02-26T19:28:25.740 に答える
0

おそらく何が起こるかというと、クライアント側に同じポートに接続する 2 つのワイヤがあることです。サーバーからメッセージを受信すると、クライアント マシンはメッセージをリダイレクトするスレッドを認識できません。これは、同じポートを指す 2 つの異なる DatagramSocket ヒントがあるためです。

于 2019-11-19T07:33:30.987 に答える