Adresse UDP déjà en cours d'utilisation?
Je suis la suite de l'UDP tutoriels http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html ,j'ai copié tout le code et compilé, maintenant, Si je compile le premier client et le serveur, le serveur s'imprime dans la console
Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at QuoteServerThread.<init>(QuoteServerThread.java:19)
at MulticastServerThread.<init>(MulticastServerThread.java:10)
at MulticastServer.main(MulticastServer.java:3)
QuoteServerThread la ligne 19 est
socket = new DatagramSocket(12345);
MulticastServerThread la ligne 10 est
public MulticastServerThread() throws IOException {
super("MulticastServerThread"); //line 10
}
MulticastServer la ligne 3 est
public class MulticastServer {
public static void main(String[] args) throws java.io.IOException {
new MulticastServerThread().start(); //line 3
}
}
Si je démarre le serveur en premier, puis le client, le client imprime cette console
Exception in thread "main" java.net.BindException: Address already in use: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at java.net.MulticastSocket.<init>(Unknown Source)
at MulticastClient.main(MulticastClient.java:9)
MulticastClient la ligne 9 est
MulticastSocket socket = new MulticastSocket(12345);
En regardant les erreurs, il me semble que c'est quelque chose à voir avec l'écoute des ports, comment puis-je corriger cela?
Toile
OriginalL'auteur Canvas | 2013-02-26
Vous devez vous connecter pour publier un commentaire.
C'est probablement parce que vous êtes déjà en cours d'exécution d'une instance du serveur. Un seul serveur peut écouter sur un port donné à un moment. Vérifiez si vous êtes déjà en cours d'exécution d'une instance (si vous utilisez Eclipse, vous devriez voir ceci dans la fenêtre de commande) et d'y mettre fin avant l'exécution d'une autre instance.
S'il est également possible qu'un cours d'eau n'a pas été arrêté correctement. Si vous utilisez un IDE, le redémarrage de l'IDE devrait résoudre le problème, même si parfois j'ai dû redémarrer mon ordinateur. Sans doute une meilleure solution pour résoudre ce problème, mais c'est ce qui a fonctionné pour moi.
tentez votre ordinateur? Si vous n'avez pas changé quoi que ce soit entre le client et le serveur à partir du tutoriel, il ne devrait pas être une erreur de code.
J'ai fait changer le port, qui n'est pas le sujet, mais ok, va lui donner un aller dans abit 🙂
J'ai refait le code et il fonctionne maintenant, ce que j'ai remarqué était, la QuoteServerThread ne pouvez pas utiliser le même port, pour mon Client, le Serveur et QuoteServer était tous sur le port 12345, c'est ce qui a causé l'erreur, alors j'ai changé mon QuoteServer, 12345, et le Serveur et le Client pour 4446, et tout fonctionne bien 🙂
"Un seul serveur peut écouter sur un port donné à un moment." Si je crée un DatagramSocket sur mon serveur et mon client et d'exécuter les deux sur la même machine, ne fait qu'illustrer ce que vous décrivez?
OriginalL'auteur Kyle
Vous pouvez effectuer les opérations suivantes:
Utiliser netstat coomand de vue de l'application qui utilise ce port.
Ensuite, utilisez tasklist et taskkill à tuer de la demande dans le port.
1. Quand j'ai répondu, il n'y a pas de réponse. 2. Ma réponse tient toujours. Parfois, les utilisateurs commencent à deux seprate instance de tomcat par exemple pour des applications de différentes ce qui peut causer ce problème. Donc netstat est un moyen rapide de savoir. 3. Parfois, les utilisateurs thisnk ils ont fermé une instance en cours d'exécution en fermant simplement le terminal alors que l'instance est toujours en cours d'exécution en arrière-plan. Donc, a accepté de répondre ne fonctionnera pas si l'application a été commencé à utiliser le terminal et par le biais de l'IDE.
OriginalL'auteur Dinesh Arora