J'ai un programme de socket serveur, lorsque j'exécute ce programme, le message d'erreur suivant s'affiche:
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.
Un serveur SQL postgres est déjà en cours d'exécution sur ce port, ce qui explique l'erreur. Mon périphérique matériel envoie uniquement des données à ce port 5434.
Quelles sont mes options pour contourner cette erreur?
Si le port est utilisé par postgresql, vous ne pouvez pas également ouvrir ce port en tant que port de serveur. Fermez postgresql ou utilisez un autre port.
Une instance de mon programme Java était déjà en cours d'exécution et occupait le port. Donc, quand j'ai essayé de démarrer une nouvelle instance, j'ai eu l'erreur. Afin de tuer l'ancienne instance, je fais ce qui suit:
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
btw. Je ne recommande pas d'arrêter postgresql de cette façon.
Découvrez quel programme utilise votre port:
Sudo netstat -nlp | grep 514
udp 0 0 :::514 :::* 30186/Java
Me dit qu'un programme Java lie le port UDP 514
Vous devriez changer votre numéro de port. J'ai eu la même erreur. Après avoir changé mon numéro de port, le problème a été résolu.