HOWTO · Java

Java.Net.SocketException: Permission Denied in Java を修正する

このチュートリアルでは、Java での java.net.SocketException: Permission denied エラーについて説明します。

このページの内容

このチュートリアルでは、Java の java.net.SocketException: Permission denied エラーについて説明します。

Java での java.net.SocketException: Permission denied エラーの原因

SocketException は通常、ネットワーク接続に問題がある場合に発生します。 許可が拒否されました接続のリセット、またはその他の可能性があります。

java.net.SocketException: Permission denied エラーは、ネットワークから特定のポートに接続する許可がない場合に発生します。 このエラーは、異なるプラットフォームでネットワーク設定を接続または構成しているときに発生する可能性があります。

エラー java.net.SocketException: Permission denied は、Tomcat や OpenShift などのどのサーバー タイプでも発生する可能性があります。

エラー java.net.SocketException: Permission denied の主な理由は次のとおりです。

  1. オペレーティング システムが特定のポート番号を許可しない場合。
  2. ウイルス対策またはファイアウォールが特定のネットワークへの接続を停止します。
  3. 古いバージョンの Java に問題がある場合があります。

Java の java.net.SocketException: Permission denied エラーを修正

たとえば、Tomcat サーバーの HTTPS 証明書を構成しているときに、サーバーの起動中にエラー java.net.SocketException: Permission denied が発生することがあります。

Caused by: java.net.SocketException: Permission denied
                at sun.nio.ch.Net.bind0(Native Method)
                at sun.nio.ch.Net.bind(Net.java:438)
                at sun.nio.ch.Net.bind(Net.java:430)
                at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:225)
                at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
                at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:221)
                at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1118)
                at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:223)
                at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:587)
                at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:1058)
                ... 13 more

このエラーの理由は、オペレーティング システムが接続を停止していることです。 Linux システムでは、root 以外のユーザーが 1024 未満の root を使用することを許可していないためです。 したがって、許可の問題になります。

さて、この問題の解決策は次のとおりです。

  1. 最善の解決策は、root アカウントを使用して Tomcat サーバーを起動することです。
  2. Linux で 1024 未満のポート番号が許可されていない場合は、この番号より大きいポートを使用します。 ポート番号は URL 要求に追加されます。

同様に、openshift サーバーの使用中に、同じエラー java.net.SocketException: Permission denied が発生する可能性があります。 その理由は、ファイアウォールまたはウイルス対策によって停止されているか、使用している Java のバージョンに互換性がない可能性があります。

これに対する可能な解決策は次のとおりです。

  1. ウイルス対策とファイアウォールを停止します。 または、サーバーをブロックしていないことを確認してください。

  2. Java 8 以降のバージョンを使用します。 または、アプリケーションに次の VM 引数を追加して、Java 7 を使用して実行および接続できるようにします。

    -Djava.net.preferIPv4Stack=true
    
  3. 特定の要件がある場合は、サードパーティのライブラリまたはパッケージを確認してください。 それらのいくつかは、java.net.SocketException: Permission denied エラーの原因にもなります。