Lorsque j'essaie de configurer un serveur de socket, j'ai un message d'erreur:
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
Le code entier est le plus simple possible:
public static void main(String[] args) throws UnknownHostException, IOException
{
ServerSocket serverSocket;
serverSocket = new ServerSocket(9999);
}
Je suis sûr à 100% que mes ports sont transférés, le pare-feu Windows est désactivé. Rien ne bloque le port 9999. Quoi d'autre peut mal se passer?
Comme d'autres personnes l'ont souligné, il est très probablement lié à un autre processus utilisant le port 9999
. Sous Windows, lancez la commande:
netstat -a -n | grep "LIST"
Et il devrait y énumérer tout ce qui monopolise le port. Bien entendu, vous devrez ensuite supprimer manuellement ces programmes dans le Gestionnaire des tâches. Si cela ne fonctionne toujours pas, remplacez la ligne:
serverSocket = new ServerSocket(9999);
Avec:
InetAddress locIP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(9999, 0, locIP);
Bien sûr remplacer 192.168.1.20
avec votre adresse IP réelle ou utilisez 127.0.0.1
.
Cela peut être lié à un mauvaise configuration dans votre /etc/hosts
. Dans mon cas, c'était comme ça: 192.168.1.11 localhost
au lieu de 127.0.0.1 localhost
Juste pour les autres personnes qui peuvent consulter cette réponse dans l’espoir de résoudre un problème similaire, j’ai reçu un message similaire car mon adresse IP a changé.
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)
L'erreur dit Cannot assign requested address
. Cela signifie que vous devez utiliser la bonne adresse pour l’une de vos interfaces réseau ou 0.0.0.0
pour accepter les connexions de toutes les interfaces.
Les autres solutions concernant les ports ne fonctionnent que lorsque la magie noire a parfois échoué (comme après le redémarrage de certains ordinateurs mais pas d'autres), car le port n'a aucune pertinence.
Documentation Java pour Java.net.BindExcpetion
,
Signale qu'une erreur s'est produite lors de la tentative de liaison d'un socket à une adresse locale et à un port. En général, le port est utilisé ou l'adresse locale demandée n'a pas pu être attribuée .
Cause:
L'erreur est due à la deuxième condition mentionnée ci-dessus. Lorsque vous démarrez un serveur (Tomcat, Jetty, etc.), il écoute un port et lie un socket à une adresse et à un port. Sous Windows et Linux, le nom d’hôte est résolu en adresse IP à partir de /etc/hosts
Ce fichier de mappage hôte-adresse IP peut être trouvé à l'adresse C:\Windows\System32\Drivers\etc\hosts
. Si ce mappage est modifié et que le nom d'hôte ne peut pas être résolu en adresse IP, vous obtenez le message d'erreur.
Solution:
Editez le fichier hosts et corrigez le mappage de nom d'hôte et IP à l'aide des privilèges d'administrateur.
par exemple:
#127.0.0.1 localhost
192.168.52.1 localhost
En savoir plus: Java.net.BindException: impossible d'attribuer l'adresse demandée.
si vous utilisez un serveur, il existe "IP réseau public" et "IP réseau interne". Utilisez "IP réseau interne" dans votre fichier/etc/hosts et "IP réseau public" dans votre code. Si vous utilisez "IP réseau public" dans votre fichier/etc/hosts, vous obtiendrez cette erreur.
Pour moi, c’est qu’un changement précédent de jmeter.properties était toujours en cours.
httpclient.localaddress=12.34.56.78
si vous êtes arrivé sur CentOS?
Tu devrais essayer ça.
$ redémarrage du réseau de service
ou
redémarrez votre serveur.
Le port est pris par un autre processus. Peut-être une exécution plus ancienne et non terminée de votre programme. Assurez-vous que votre programme s'est bien terminé ou tuez-le.
Lorsque l'erreur indique, elle ne peut pas être liée - ce qui signifie généralement qu'elle est utilisée par un autre processus. A partir d'une ligne de commande, lancez:
netstat -a -n -o
Interrogez la sortie du port 9999 utilisé dans la colonne de gauche.
Pour plus d'informations: http://www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm
Dans mon cas, supprimer de/etc/hosts
J'ai rencontré cette erreur lors de la copie de configurations d'un serveur à un autre.
J'ai eu le nom d'hôte de l'ancien hôte dans ma propriété $ {JETTY_BASE} /start.ini jetty.Host. La définition de la valeur correcte de la propriété jetty.Host a résolu le problème pour moi.
J'espère que cela aidera quelqu'un dans le futur qui doit travailler sur plusieurs serveurs à la fois.