Невозможно назначить запрошенный адрес: JVM_Bind - PullRequest
43 голосов
/ 23 января 2012

Когда я пытаюсь настроить сервер сокетов, у меня появляется сообщение об ошибке:

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);
}

Я на 100% уверен, что мои порты перенаправлены, брандмауэр Windows отключен. Ничто не блокирует порт 9999. Что еще может пойти не так?

Ответы [ 13 ]

30 голосов
/ 31 октября 2012

Это может быть связано с неверной конфигурацией в вашем /etc/hosts. В моем случае это было так: 192.168.1.11 localhost вместо 127.0.0.1 localhost

17 голосов
/ 23 января 2012

Как отмечали другие люди, это, скорее всего, связано с другим процессом, использующим порт 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.

15 голосов
/ 02 августа 2013

Просто для тех, кто может посмотреть на этот ответ в надежде решить подобную проблему, я получил подобное сообщение, потому что мой 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)
12 голосов
/ 10 октября 2013

Ошибка говорит Cannot assign requested address.Это означает, что вам нужно использовать правильный адрес для одного из ваших сетевых интерфейсов или 0.0.0.0 для приема соединений от всех интерфейсов.

Другие решения о портах работают только после порой сбойной черной магии (например, работа посленекоторые компьютеры перезагружаются, но не другие), поскольку порт совершенно не имеет значения.

5 голосов
/ 09 июля 2015

Документация Java для java.net.BindExcpetion,

Сигнализирует о том, что произошла ошибка при попытке привязать сокет к локальному адресу и порту.Как правило, порт используется , или запрошенный локальный адрес не может быть присвоен .

Причина:

Ошибкаиз-за второго условия, упомянутого выше.Когда вы запускаете сервер (Tomcat, Jetty и т. Д.), Он прослушивает порт и связывает сокет с адресом и портом.В Windows и Linux имя хоста преобразуется в IP-адрес с /etc/hosts Этот файл сопоставления хоста с IP-адресом можно найти на C:\Windows\System32\Drivers\etc\hosts.Если это сопоставление изменилось и имя хоста не может быть преобразовано в IP-адрес, вы получите сообщение об ошибке.

Решение:

Отредактируйте файл хостов и исправьте сопоставление для имени хоста и IP с помощью adminпривилегии.

например:

#127.0.0.1 localhost
192.168.52.1 localhost

Подробнее: java.net.BindException: невозможно назначить запрошенный адрес.

4 голосов
/ 04 января 2017

если вы используете сервер, есть "IP публичной сети" и "IP внутренней сети". Используйте «IP внутренней сети» в вашем файле / etc / hosts и «IP публичной сети» в своем коде. если вы используете «общедоступный сетевой IP» в вашем файле / etc / hosts, вы получите эту ошибку.

4 голосов
/ 15 августа 2013

Для меня это было потому, что предыдущее изменение jmeter.properties было все еще в игре

httpclient.localaddress=12.34.56.78
0 голосов
/ 23 августа 2016

если вы попали на CentOS?

Вам следует попробовать это.

$ перезапустить службу сети

или

перезагрузить сервер.

0 голосов
/ 16 мая 2016

Я сталкивался с этой ошибкой при копировании конфигураций с одного сервера на другой.

У меня было старое имя хоста в моем свойстве $ {JETTY_BASE} /start.ini jetty.host . Установка правильного значения свойства jetty.host решила проблему для меня.

Надеюсь, что в будущем это поможет кому-то, кто должен работать на нескольких серверах одновременно.

0 голосов
/ 30 марта 2016

В моем случае удалите из / etc / hosts

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost <<<< ---- (удалить или оставить комментарий) </li>
...