Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture de ports serie en Java.

Problème de raisonement.

Sujet résolu
    6 mars 2012 à 12:31:19

    Bonjour à tous,

    J'explique mon contexte, je développe une application qui me permet d’écouter sur les ports séries du poste et de traiter leurs trames.
    j'utilise la libraire Rxtx.
    Rien d'extraordinaire mais j'ai un problème de raisonnement sur ma récolte de trame.

    Je m'explique, je récolte ma trame dans une instance de String et une foi la trame fini j'ai une belle variable avec tout ce que je veux dedans.
    Super classe :D , mais cette variable se compose en plusieurs tours de boucle de mon "Listen" sur le port.

    Or je ne vois pas comment je peux tester le fait qu'il n'y a plus de flux sur le port et que donc ma variable avec la trame doit être traité par la suite du programme.

    Je vous montre mon code (la boucle) où je sèche.



    public void run ()
    {
    	String ligneTrame = "";
    	byte[] buffer = new byte[1024];
    	int len = -1;
    	int i = 0;
    	try
    	{
    		while ( ( len = this.in.read(buffer)) > -1 )
    		{
    			ligneTrame = ligneTrame + new String(buffer,0,len);
    			System.out.println(ligneTrame);
    		}
    	}
    	catch ( IOException e )
    	{
    		e.printStackTrace();
    	}            
    }
    


    C'est surement tout bête mais je vois pas. J'ai cherché sur la JavaDoc de Rxtx mais rien.


    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      16 mars 2012 à 10:03:13

      Je reposte donc pour vous expliquer comment j'ai régler mon problème.
      Peu t’être que ça sera utile pour quelqu'un.

      public void run ()
      	{
      		String ligneTrame = "";
      		String ligneTrameCompare = "vide";
      		byte[] buffer = new byte[1024];
      		int len = -1;
      		try
      		{
      			while ( ( len = this.in.read(buffer)) > -1 )
      			{
      				if (ligneTrame.length() > 2){ligneTrameCompare = ligneTrame;}
      				ligneTrame = ligneTrame + new String(buffer,0,len);
      				if (ligneTrame.equals(ligneTrameCompare))
      				{	
      					System.out.println("ça marche !!");
      					ligneTrameCompare = "vide";
      					ligneTrame = "";
      				}
      			}
      		}
      		
      		catch ( IOException e )
      		{
      			e.printStackTrace();
      		}            
      	}
      


      En gros je compare une variable avec une autre qui reçoit la trame.
      La variable ligneTrameCompare a un tour de boucle de retard sur ligneTrame.

      Donc dès que les deux sont identiques ça veut dire qu'il y a eu un tour de boucle où la variable ligneTrame n'a pas été changé et que donc la trame s'est terminé.

      Voila, du bonheur !
      • Partager sur Facebook
      • Partager sur Twitter

      Lecture de ports serie en Java.

      × 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