Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur : Address already in use: JVM_Bind

    24 avril 2015 à 14:12:50

    Bonjour,
    j'ai entrain de développer une application qui comporte deux patrie client et serveur , on doit envoyer un fichier xml du coté client vers serveur, et aprés un traitement par le serveur , ce dernier doit envoyer un fichier exécutable '*.apk', pour cela on a utilisé les sockets . tout ça passe bien . mais pour qu'il soit plus utilisable on a ajouté un interface graphique avec deux boutons "connect" et déconnect" , on veux lors de la clique sur "connect " le serveur peut toujours recevoir des fichiers de plusieurs clients .Si on clique sur "déconnect" la connexion doit achevé . mais j'ai un problème qui est indiqué ci_dessous:

    java.net.BindException: Address already in use: JVM_Bind
        at java.net.DualStackPlainSocketImpl.bind0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
        at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
        at java.net.PlainSocketImpl.bind(Unknown Source)
        at java.net.ServerSocket.bind(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at ServPack.Envoie_apk_generer_socket.lancer(Envoie_apk_generer_socket.java:15)
        at ServPack.Compilation.apk(Compilation.java:26)
        at ServPack.Serveur.main(Serveur.java:62)

    public class Serveur {
    
    static int connect=0;
    
    static String cheminFichiers="C:/Users/asma/fichiersPfe/";
    //cheminFichiers contient les fichiers fichier.bat,compile.bat et les images pour Drawable
    public static void main(String[] args) throws IOException, InterruptedException {
    
    new Interface().setVisible(true);
    
    while(true){
    while(connect==1){
    System.out.println("***debut class serveur***");
    
    //recevoir le fichier xml du client
    ReceptionFichierXml.lancer();
    
    // un traitement par serveur
    // ......
    //compiler en ligne de commande
    Compilation.apk();
    
    
    //envoyer apk vers application android
    Envoie_apk_generer_socket.lancer();
    }
    }
    
    }
    
    } 
    public static void lancer(){
    		
    		
    		try{
    			ServerSocket ss = new ServerSocket(4000);
    
    					System.out.println("Running............");
    					
    					//while(true)
    					//{
    						Socket s = ss.accept();
    					
    						System.out.println("accept");
    						FileInputStream fis = new FileInputStream(CreateProject.chemin1+"/bin/MainActivity-debug.apk");
    						byte [] buffer = new byte[fis.available()];
    						fis.read(buffer);
    						ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
    						oos.writeObject(buffer);
    						oos.close();
    						s.close();
    					//}
    		
    		              }catch (NumberFormatException e){
    			           e.printStackTrace();	
    		              }catch (UnknownHostException e) {
    			          e.printStackTrace();	
    		              }catch (IOException e)	{
    			          e.printStackTrace();	
    		              }
    
    		
    		      
     



    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2015 à 17:55:19

      Bonjour,

      Es-tu sûr que lorsque tu cliques sur "Disconnect" tu appelles bien ton code pour fermer la connexion ? Car l'exception t'informe que tu as déjà un socket actif à ton couple adresse:port. Ça laisserait penser qu'au lieu de fermer ton socket tu en ouvres un nouveau.

      -
      Edité par The_Javatar 24 avril 2015 à 17:56:59

      • Partager sur Facebook
      • Partager sur Twitter

      cd514331234507.564a1d2324e4e.gifCTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr

        24 avril 2015 à 18:19:25

        Ah ok, donc lors de l'exécution il faut cliquer sur "disconnect " ce qui signifiera qu'on peut pas faire plusieurs transfères de données par une socket , on ait obliger de fermer la socket. c ça?
        • Partager sur Facebook
        • Partager sur Twitter
          25 avril 2015 à 16:24:18

          Cela signifie que tu ne peux avoir qu'un socket à la fois écoutant sur un même port pour une adresse donnée. Mais sur un socket tu peux faire autant de transferts de données que tu le souhaites.
          • Partager sur Facebook
          • Partager sur Twitter

          cd514331234507.564a1d2324e4e.gifCTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr

          Erreur : Address already in use: JVM_Bind

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown