IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

erreur convertion String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut erreur convertion String
    Bonjour tout le monde, j'ai un projet pour la fac a rendre en reseau mais je bloque a un endroit.
    Dans mon programme j'envoie une chaine de caractere de la forme 42022:6:52:52:40:4525:25:48:1:20:31)47:25:47:48:4:10) et qui represente les caracteristique d'un objet.
    Les deux programmes interagissent en UDP, ils recoivent bien les chaine des caracteres envoyés par l'autre, mais la methode qui s'occupe de mettre les caracterisques dans un tableau plante.

    fonction qui crée le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static int[] IPemonTabMaker(String StringIpemon)
    	{
    		int i=0;
    		int T_IPm_stat[] = new int[18];
    		String S_IPemonData = StringIpemon;
    		StringTokenizer st = new StringTokenizer(S_IPemonData, ":() ");
    		while (st.hasMoreTokens())
    		{
    			T_IPm_stat[i]=Integer.parseInt(st.nextToken());
    			i++;
    		}
    		return T_IPm_stat;
    	}
    fonction qui envoie et recoie la String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     try{
    					String envoie =Ipemon.IPemonDataMaker(T_IPm[0]);
    					send(envoie,portD);
    					JTAInfo.append("Message envoyé : "+envoie+"\n");
    					received = receive();//receive est une String
    			                System.out.println("Message recu : "+received);
    				       JTAInfo.append("Message recu : " +received+"\n");
    				       T_IPm[1]=new Ipemon(Ipemon.IPemonTabMaker(recu));
    fonction send et receive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public void send(String s,int portD)throws IOException 
    	{ 
     
    		bufR =s.getBytes();//private byte[] bufR = new byte[256];
    		packet = new DatagramPacket(bufR, bufR.length, address, portD);
    		socket.send(packet);
     
    	}
     
    	public String receive()throws IOException 
    	{ 
    		bufR = new byte[256];
    		packet = new DatagramPacket(bufR, bufR.length);
    		socket.receive(packet);
    		received = new String(packet.getData());	
    		return received;
    	}

    J'obtiens
    Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:470)
    at java.lang.Integer.parseInt(Integer.java:514)
    at Ipemon.IPemonTabMaker(Ipemon.java:51

    Mais quand je change
    public String receive()throws IOException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	{ 
    		bufR = new byte[256];//private byte[] bufR = new byte[256];
    		packet = new DatagramPacket(bufR, bufR.length);
    		socket.receive(packet);
    		received = new String(packet.getData());	
    		return received;
    	}
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	{ 
     
    		packet = new DatagramPacket(bufR, bufR.length);
    		socket.receive(packet);
    		received = new String(packet.getData());	
    		return received;
    	}
    je n'ai plus l'erreur, mais la chaine de caractere est mal forme, vu que les numero quil composent sont tiré au hasard, elle a une taille qui varie, et donc jai la bonne String recu mais avec a la fin un morceau de la String envoyé, je sais pas si vous comprenez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Message envoyé : 210074:12:115:115:6:16:(13:36:21:37:33:33):(11:18:31:14:33:4)
    Message recu :     54589:10:97:97:28:43:(0:14:1:36:11:0):(11:45:36:32:29:43)3:4)
    Merci de votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ton problème est qu'à la réception, tu ne connais pas la taille de la String. Tu ne sais donc pas combien d'octets il faut lire, combien d'octets il faut mettre dans le new String(). Là tu les mets "tous" mais ça veut juste dire, mettre tout le buffer, qu'il soit plein ou non.
    En faisant ainsi, ça ne marchera jamais. Tu dois savoir la taille de la String reçue, peu importe la manière mais c'est indispensable.

    Première solution (la plus simple) :
    - Envoyer d'abord la taille en octets de la String. Comme un byte n'est sans doute pas suffisant (valeur max : 127), il va falloir envoyer deux bytes, et les convertir en un int ou un short. Apprendre comment on fait ça.

    Deuxième solution (la plus souvent retenue par les protocoles texte) :
    - Envoyer un marqueur de fin à la fin de la String, pour savoir que l'octet précédent était le dernier et qu'on a fini de lire. Par exemple un octet nul. Ça peut être n'importe quoi, du moment que ça n'apparaît jamais dans la String.

    Bon, c'est assez compliqué, mais en même temps c'est pas pour rien qu'il y a plein de protocoles déjà faits dont il suffit de se servir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut
    Merci de ta reponse, mais je ne comprends alors pas pourquoi il affiche bien la String envoyée quand je fais un System.out. Et de quel protocole parles tu ?

    merci encore

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Parce qu'il n'y a pas de problème à l'émission mais à la réception. L'émetteur la connaît, la taille de la String, il sait où s'arrêter.

    Et de quel protocole parles tu ?
    Tous. Pour chaque communication réseau qu'on puisse avoir besoin de faire, il y a en général plusieurs protocoles qui gèrent ce genre de choses et qui sont déjà implémentés, prêts à être utilisés par un programme Java.

    Bon, moi je connais surtout HTTP et c'est un peu particulier. Ce que je veux dire, c'est que si tu as un besoin précis, tu peux peut-être chercher une bibliothèque qui le fait déjà plutôt que de travailler directement sur les sockets.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    je rajoute qu'avec l'UDP, t'as pas de garanties

    -> de réception de ce qui est envoyé
    -> d'intégrité du paquet

Discussions similaires

  1. erreur convertion string/datetime
    Par Yurnero_ dans le forum InfoPath
    Réponses: 3
    Dernier message: 23/05/2008, 16h05
  2. erreur type string
    Par blastmanu dans le forum C++
    Réponses: 3
    Dernier message: 21/04/2006, 01h07
  3. Réponses: 2
    Dernier message: 06/12/2005, 12h01
  4. Convertion string => entier
    Par en_gel_ho dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/06/2005, 12h59
  5. convertion string --> long
    Par JulienT dans le forum Langage
    Réponses: 3
    Dernier message: 23/03/2005, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo