web-dev-qa-db-ja.com

要求されたアドレスを割り当てることができません:JVM_Bind

ソケットサーバーをセットアップしようとすると、エラーメッセージが表示されます。

Exception in thread "main" Java.net.BindException: Cannot assign requested address: JVM_Bind
    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 Java.net.ServerSocket.<init>(ServerSocket.Java:106)
    at socketyserver.SocketyServer.main(SocketyServer.Java:12)
Java Result: 1

コード全体が最も単純です:

public static void main(String[] args) throws UnknownHostException, IOException
{
    ServerSocket serverSocket;
    serverSocket = new ServerSocket(9999);
}

ポートが転送され、Windowsファイアウォールがオフになっていることは100%確信しています。ポート9999をブロックするものはありません。他に何が問題になる可能性がありますか?

43
Adrian Adamczyk

他の人が指摘しているように、それはおそらくポート9999を使用する別のプロセスに関連しています。 Windowsでは、次のコマンドを実行します。

netstat -a -n | grep "LIST"

そして、ポートを占有しているものをすべてリストする必要があります。もちろん、タスクマネージャーでこれらのプログラムを手動で強制終了する必要があります。それでもうまくいかない場合は、次の行を置き換えます。

serverSocket = new ServerSocket(9999);

と:

InetAddress locIP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(9999, 0, locIP);

もちろん、192.168.1.20を実際のIPアドレスに置き換えるか、127.0.0.1を使用します。

17
Marvin Pinto

/etc/hostsの-​​misconfigurationに関連している可能性があります。私の場合、これは次のようなものでした:192.168.1.11 localhostの代わりに127.0.0.1 localhost

30
Oueslati Bechir

同様の問題を解決することを期待してこの答えを見るかもしれない他の人のために、私のIPアドレスが変わったので、私は同様のメッセージを受け取りました。

Java.net.BindException: Cannot assign requested address: bind
    at Sun.nio.ch.Net.bind(Native Method)
    at Sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.Java:126)
    at Sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.Java:59)
    at org.Eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.Java:182)
    at org.Eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.Java:311)
    at org.Eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.Java:260)
    at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:59)
    at org.Eclipse.jetty.server.Server.doStart(Server.Java:273)
    at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:59)
15
cquezel

エラーにはCannot assign requested addressと表示されます。つまり、ネットワークインターフェースの1つに正しいアドレスを使用するか、0.0.0.0を使用してすべてのインターフェースからの接続を受け入れる必要があります。

ポートに関するその他のソリューションは、ポートが完全に無関係であるため、時々失敗するブラックマジック(一部のコンピューターは再起動したが他のコンピューターは再起動しないなど)後にのみ機能します。

12
Olathe

Java.net.BindExcpetionのJavaドキュメント、

ソケットをローカルアドレスとポートにバインドしようとしたときにエラーが発生したことを通知します。通常、ポートは使用中です、または要求されたローカルアドレスは割り当てられませんでした

原因:

このエラーは、上記の2番目の条件が原因です。サーバー(Tomcat、Jettyなど)を起動すると、ポートをリッスンし、ソケットをアドレスとポートにバインドします。 WindowsおよびLinuxでは、ホスト名は/etc/hostsからIPアドレスに解決されます。このホストからIPアドレスへのマッピングファイルは、C:\Windows\System32\Drivers\etc\hostsにあります。このマッピングが変更され、ホスト名をIPアドレスに解決できない場合、エラーメッセージが表示されます。

解決:

ホストファイルを編集し、管理者権限を使用してホスト名とIPのマッピングを修正します。

例えば:

#127.0.0.1 localhost
192.168.52.1 localhost

詳細: Java.net.BindException:要求されたアドレスを割り当てることができません。

5
Lucky

サーバーを使用している場合、「パブリックネットワークIP」と「内部ネットワークIP」があります。ファイル/ etc/hostsで「内部ネットワークIP」を使用し、コードで「パブリックネットワークIP」を使用します。ファイル/ etc/hostsで「パブリックネットワークIP」を使用すると、このエラーが発生します。

4
Nick Qian

私にとっては、以前のjmeter.propertiesの変更がまだ有効であったためでした

httpclient.localaddress=12.34.56.78
4
Kevin Reilly

あなたがCentOSで起こったら?

これを試してみてください。

$サービスネットワークの再起動

または

サーバーを再起動します。

0
seyeon

ポートは別のプロセスによって取得されます。おそらく、プログラムの未終了の古い実行です。プログラムが正常に終了したことを確認するか、強制終了します。

0
Bozho

エラーが示すように、バインドできません-これは通常、別のプロセスで使用されていることを意味します。コマンドラインから実行:

netstat -a -n -o

左側の列で使用中のポート9999の出力を調べます。

詳細: http://www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm

0
Dan Hardiker

私の場合、/ etc/hostsから削除します

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost <<<< ----(削除またはコメント)
0
Cahedral

あるサーバーから別のサーバーに構成をコピーすると、このエラーが発生しました。

$ {JETTY_BASE} /start.ini jetty.Hostプロパティに古いホストのホスト名がありました。正しいjetty.Hostプロパティ値を設定すると、問題が解決しました。

これが将来複数のサーバーで同時に作業しなければならない人を助けることを願っています。

0
vixelated