"java.net.BindException: адрес уже используется", когда я уже запускаю службу на том же порту

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

java.net.BindException: Address already in use
    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 Server.main(Server.java:20)
Could not listen on port: 5434.

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

Каковы мои возможности обойти эту ошибку?

Ответ 1

Если порт используется postgresql, вы также можете открыть этот порт в качестве порта сервера. Либо закройте postgresql, либо используйте другой порт.

Ответ 2

Mac специфический

Экземпляр моей java-программы уже запущен и занимает порт. Поэтому, когда я попытался запустить новый экземпляр, я получил ошибку. Чтобы убить старый экземпляр, я делаю следующее:

prompt> lsof -i:5434
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    71107 neoneye   68u  IPv6 0x4a0371dea87d2cd3      0t0  TCP *:http-alt (LISTEN)
prompt> kill 71107

кстати. Я не рекомендую останавливать postgresql таким образом.

Ответ 3

Узнайте, какая программа использует ваш порт:

sudo netstat -nlp | grep 514

udp        0      0 :::514                :::*                            30186/java

Сообщает мне, что java-программа является обязательной для UDP-порта 514

Ответ 4

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