Kan het gevraagde adres niet toewijzen met ServerSocket.socketBind

Als ik een socketserver probeer in te stellen, krijg ik een foutmelding:

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

De hele code is zo eenvoudig mogelijk:

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

Ik weet 100% zeker dat mijn poorten zijn doorgestuurd, Windows Firewall is uitgeschakeld. Niets blokkeert poort 9999. Wat kan er nog meer fout gaan?


Antwoord 1, autoriteit 100%

Zoals andere mensen hebben opgemerkt, is het waarschijnlijk gerelateerd aan een ander proces dat poort 9999gebruikt. Voer in Windows het volgende commando uit:

netstat -a -n | grep "LIST"

En het zou alles moeten vermelden dat de poort bezet. Natuurlijk moet je die programma’s dan handmatig in Taakbeheer doden. Als dit nog steeds niet werkt, vervang dan de regel:

serverSocket = new ServerSocket(9999);

Met:

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

Vervang natuurlijk 192.168.1.20door uw werkelijke IP-adres, of gebruik 127.0.0.1.


Antwoord 2, autoriteit 95%

Het kan te maken hebben met een verkeerde configuratiein uw /etc/hosts.
In mijn geval was het als volgt:
192.168.1.11 localhostin plaats van 127.0.0.1 localhost


Antwoord 3, autoriteit 75%

Alleen voor anderen die naar dit antwoord kunnen kijken in de hoop een soortgelijk probleem op te lossen, ik kreeg een soortgelijk bericht omdat mijn ip-adres is gewijzigd.

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)

Antwoord 4, autoriteit 70%

De fout zegt Cannot assign requested address. Dit betekent dat u het juiste adres voor een van uw netwerkinterfaces of 0.0.0.0moet gebruiken om verbindingen van alle interfaces te accepteren.

De andere oplossingen over poorten werken alleen na soms falende zwarte magie (zoals werken nadat de ene computer opnieuw is opgestart, maar niet de andere) omdat de poort volledig irrelevant is.


Antwoord 5, autoriteit 35%

Java-documentatie voor java.net.BindExcpetion,

Signaleert dat er een fout is opgetreden tijdens een poging om een socket te binden aan een
lokaal adres en poort. Meestal is de poort in gebruik, of de
het aangevraagde lokale adres kan niet worden toegewezen.

Oorzaak:

De fout is te wijten aan de tweede hierboven genoemde voorwaarde. Wanneer u een server start (Tomcat, Jetty enz.), luistert deze naar een poort en bindt een socket aan een adres en poort. In Windows en Linux wordt de hostnaam omgezet in IP-adres van /etc/hostsDit host-naar-IP-adrestoewijzingsbestand is te vinden op C:\Windows\System32\Drivers\etc\hosts. Als deze toewijzing wordt gewijzigd en de hostnaam niet kan worden omgezet naar het IP-adres, krijgt u de foutmelding.

Oplossing:

Bewerk het hosts-bestand en corrigeer de toewijzing voor hostnaam en IP met beheerdersrechten.

bijvoorbeeld:

#127.0.0.1 localhost
192.168.52.1 localhost

Lees meer: java.net .BindException: kan het gevraagde adres niet toewijzen.


Antwoord 6, autoriteit 30%

als u een server gebruikt, is er “openbaar netwerk-IP” en “intern netwerk-IP”.
Gebruik de “interne netwerk-IP” in uw bestand /etc/hosts en “openbare netwerk-IP” in uw code.
als u “public network IP” in uw bestand /etc/hosts gebruikt, krijgt u deze foutmelding.


Antwoord 7, autoriteit 20%

Voor mij was het omdat een eerdere wijziging van jmeter.properties nog in het spel was

httpclient.localaddress=12.34.56.78

Antwoord 8

Zoals de fout aangeeft, kan het niet binden – wat meestal betekent dat het door een ander proces wordt gebruikt. Voer vanaf een opdrachtregel uit:

netstat -a -n -o

Ondervraag de uitvoer voor poort 9999 die in gebruik is in de linkerkolom.

Voor meer informatie: http: //www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm


Antwoord 9

In mijn geval, verwijderen uit /etc/hosts

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost <<<<—- (verwijderen of commentaar geven)

Antwoord 10

Ik kwam deze fout tegen bij het kopiëren van configuraties van de ene server naar de andere.

Ik had de hostnaam van de oude host in mijn ${JETTY_BASE}/start.ini jetty.hosteigendom. Het instellen van de juiste jetty.host eigenschapswaarde loste het probleem voor mij op.

Ik hoop dat dit iemand in de toekomst helpt die op meerdere servers tegelijk moet werken.


Antwoord 11

als je toevallig op CentOS bent geweest?

Je zou dit moeten proberen.

$ servicenetwerk opnieuw opstarten

of

start je server opnieuw op.


Antwoord 12

Mijn laptop heeft een interne DNS-naam in het netwerk, het was in orde tot ietsen toen is het kapot gegaan.

Om dit op te lossen heb ik een regel toegevoegd om alle verzoeken op DNS-naam naar mijn 127.0.0.1 te routeren, mijn /etc/hostsziet er als volgt uit:

127.0.0.1       localhost
127.0.0.1       host.docker.internal
127.0.0.1       my-url.box #added for the problem

kan relevant zijn voor iemand.

Het is gemakkelijk om te debuggen, gewoon een les uit te voeren totdat dit groen is:

public static void main(String[] args) throws Exception {
        new ServerSocket(0, 1, InetAddress.getLocalHost());
    }

Antwoord 13

De poort wordt door een ander proces genomen. Mogelijk een niet-beheerde oudere run van uw programma. Zorg ervoor dat uw programma netjes is verlaten of het doden.


Antwoord 14

java.net.bindexception: kan het gevraagde adres niet toewijzen

Volgens BindExceptionDocumentatie, het is in feite:

Signalen waarvoor er een fout is opgetreden tijdens een poging om een ​​socket aan een lokaal adres en poort te binden. Meestal is de poort in gebruik of konden het gevraagde lokale adres niet worden toegewezen.

Dus probeer de volgende opdracht:

sudo lsof -i:8983

Controleer of een toepassing dezelfde poort gebruikt en het kan doden.

Als dat niet het geval is, zorg er dan voor dat uw IP-adres waarnaar u probeert te binden correct is (het is correct toegewezen aan uw netwerkinterface).

Other episodes