Невозможно назначить запрошенный адрес с помощью 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. Что еще может пойти не так?
Ответы
Ответ 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-адрес, с которым вы пытаетесь установить соединение, корректен (он правильно назначен вашему сетевому интерфейсу).