web-dev-qa-db-ja.com

「Java.net.BindException:アドレスはすでに使用されています」同じポートですでにサービスを実行している場合

サーバーソケットプログラムが1つあります。このプログラムを実行すると、次のエラーが発生します。

Java.net.BindException: Address already in use
    at Java.net.PlainSocketImpl.socketBind(Native Method)
    at Java.net.PlainSocketImpl.bind(PlainSocketImpl.Java:383)
    at Java.net.ServerSocket.bind(ServerSocket.Java:328)
    at Java.net.ServerSocket.<init>(ServerSocket.Java:194)
    at Server.main(Server.Java:20)
Could not listen on port: 5434.

エラーを説明するpostgres sqlサーバーがこのポートですでに実行されています。私のハードウェアデバイスは、この5434ポートにのみデータを送信します。

このエラーを回避するための私のオプションは何ですか?

10
user2346809

Mac固有

私のJavaプログラムのインスタンスはすでに実行中であり、ポートを占有しています。そのため、新しいインスタンスを起動しようとすると、エラーが発生しました。古いインスタンスを強制終了するために、次のようにします:

Prompt> lsof -i:5434
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Java    71107 neoneye   68u  IPv6 0x4a0371dea87d2cd3      0t0  TCP *:http-alt (LISTEN)
Prompt> kill 71107

ところで。この方法でpostgresqlを停止することはお勧めしません。

8
neoneye

Postgresqlがポートを使用している場合は、このポートをサーバーポートとして開くこともできません。 postgresqlをシャットダウンするか、別のポートを使用してください。

7
Scary Wombat

どのプログラムがポートを使用しているかを調べます:

Sudo netstat -nlp | grep 514

udp        0      0 :::514                :::*                            30186/Java

JavaプログラムがUDPポート514でバインドしていることを通知します

3
Eric Leschinski

ポート番号を変更する必要があります。同じエラーが発生しました。ポート番号を変更した後、解決しました。

1
java.nazif