Подтвердить что ты не робот

Невозможно назначить запрошенный адрес с помощью ServerSocket.socketBind

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

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. Что еще может пойти не так?

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Причина:

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

Решение:

Отредактируйте файл hosts и исправьте сопоставление имени хоста и IP-адреса, используя привилегии администратора.

например:

#127.0.0.1 localhost
192.168.52.1 localhost

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

Ответ 6

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

httpclient.localaddress=12.34.56.78

Ответ 7

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

Ответ 8

Порт берется другим процессом. Возможно, это неисчерпаемая старая версия вашей программы. Убедитесь, что ваша программа прошла чисто или убила его.

Ответ 9

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

netstat -a -n -o

Опросить вывод для порта 9999 в левом столбце.

Для получения дополнительной информации: http://www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm

Ответ 10

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

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost < < < " ---- (удаление или комментарий)

Ответ 11

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

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

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

Ответ 12

если вы оказались в CentOS?

Вы должны попробовать.

$перезагрузка сети службы

или

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

Ответ 13

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

Согласно документации BindException, в основном это:

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

Итак, попробуйте выполнить следующую команду:

sudo lsof -i:8983

чтобы проверить, использует ли какое-либо приложение тот же порт и убивает его.

Если это не так, убедитесь, что ваш IP-адрес, с которым вы пытаетесь установить соединение, корректен (он правильно назначен вашему сетевому интерфейсу).