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 9999
gebruikt. 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.20
door 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 localhost
in 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.0
moet 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/hosts
Dit 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/hosts
ziet 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 BindException
Documentatie, 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).