Lire un mot complet en java (rs232)

pikamo Messages postés 34 Date d'inscription dimanche 21 mars 2010 Statut Membre Dernière intervention 21 novembre 2012 - 13 avril 2010 à 18:51
pikamo Messages postés 34 Date d'inscription dimanche 21 mars 2010 Statut Membre Dernière intervention 21 novembre 2012 - 15 avril 2010 à 21:09
salut ,
Voilà j'ai un petit pb,si qqun pourrait m'aider,
ça serait super sympa car là je suis un peu coincé.

je doit récupère le login et mot de passe envoyé sur le port rs232 .
1ére je doit envoyé une lettre par exemple "d" ,j'ai bien réussir a l'envoyer
     public void writetoport(String s) {
      System.out.println("Writing ""+s+"" to "+serialPort.getName());
      try {
 outputStream.write(s.getBytes());
      } catch (IOException e) {}
   }

un petite appelle :
     public void run() {
      initwritetoport();
 /* écrit une chaîne dans le port, le serialEvent vais le lire*/
    	     writetoport("d");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(rs232.class.getName()).log(Level.SEVERE, null, ex);
        }
}

mon probléme est :
 public void serialEvent(SerialPortEvent event) {
      switch (event.getEventType()) {
      case SerialPortEvent.BI:System.out.println("message lu OE");break;
      case SerialPortEvent.OE:
      case SerialPortEvent.FE:
      case SerialPortEvent.PE:
      case SerialPortEvent.CD:
      case SerialPortEvent.CTS:
      case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
         break;
case SerialPortEvent.DATA_AVAILABLE:
readformport();
         break;
      }
   }
  public void readformport () {
  byte[] readBuffer = new byte[400];
try{
int avaibleBytes = inputStream.available();
if (avaibleBytes > 0){
inputStream.read(readBuffer,0,avaibleBytes) ;
String result  = new String(readBuffer,0,avaibleBytes);
 System.out.println("Read: "+result);
      }
        }catch (IOException e) {}
        }

Read : a 
Read : b
Read :c 

mais je doit avoir read: abc (par exemple c'est le login et apres le mot de passe )
comment je doit faire méme des mots clés pour chercher .
merci d'avance

3 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 avril 2010 à 07:45
Il suffit de les concatener, je te conseille de les ajouter à une liste au fur et à mesure et de faire une fonction toute bête comme celle-ci :

public static String concatenerLettres(ArrayList<String> liste){
   String res = ""
   for(String lettre : liste){
      res+=lettre;
   }
   return res;
}
0
pikamo Messages postés 34 Date d'inscription dimanche 21 mars 2010 Statut Membre Dernière intervention 21 novembre 2012
14 avril 2010 à 18:48
salut,
merci Julien39 pour la réponse.

mais j'ai pas comprit la fonction de cette class et même j'ai essaye de l'appliquer (après la changement de variable bien sur ) mais j'ai pas réussir.
j'ai une autre idée a faire :
les données vent de port sont sous ce forme :
* login # ( avec la taile de login 5 , * le début et # le fin ) *1234# ( le mot de passe avec la taille est 4 ).
d'où :
read : *
read : l
read : O...

après
if (String result.equals("*" ))
si *true ==> 
String  LOGIN =  new String(); /* on vide la vaiable où on va stoker */
  mettre dans LOGIN 
else if (String result.equals('#'))
System.out.println ( "ma chine :"+LOGIN);
else [u]LOGIN[i] = result;
i++;
/u

je sais pas comment faire ca en java car j'ai des erreurs dans le syntaxe
(oups) je suis null en java .
0
pikamo Messages postés 34 Date d'inscription dimanche 21 mars 2010 Statut Membre Dernière intervention 21 novembre 2012
15 avril 2010 à 21:09
salut,

j'ai réussi a faire avec ce code :
public static byte[] readBuffer = new byte[20];
int i =0;
String login;
static boolean        condition = false;
 ......
........
try {
  i++;
// données lues
  while (inputStream.available() > 0) {
  int numBytes = inputStream.read(readBuffer);
            }
// données d'impression

String result  = new String(readBuffer).trim();
System.out.println("Read: "+ i +" : "+ result);

if ( result.equals("*" ))
   {
login = new  String();
//System.out.println ( "ma chaine : vide ");
condition = true;
    }
else if ( result.equals("#"))
    {
System.out.println ( "ma chaine :"+login);
condition=false;
    }
else if (condition==true)
{
login=login+result;
//System.out.println ( "mon result  " +login);
}

login=login+result;//j'ai pas comprit cettte ligne 
0
Rejoignez-nous