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

avec Java Discussion :

Impossible de parser un "String" en "int"


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Impossible de parser un "String" en "int"
    Bonjour, bonsoir.

    Je suis actuellement en train de coder un petit pong en réseau via UDP (j'avais déjà réussi, si on peut dire, à le faire via TCP), mais actuellement je tombe sur un petit problème que je n'arrive pas à résoudre seul.

    J'essaye tant bien que mal de convertir un string en int mais sans succès.

    Voici mon code pour la classe d'envoie de donnée :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import java.net.*;
    import java.io.*;
     
    public class GameSockOut implements Runnable {
        private DatagramSocket client;
        private String msg;
        static boolean sockRun = false;
     
        public GameSockOut(DatagramSocket client) {
            this.client = client;
        }
     
        @Override
        public void run() {
            while(true) {
                try {
                    if(sockRun) {
                        byte [] buffer = new byte[30];
                        int port = 56000;
     
                        InetAddress adresse = InetAddress.getByName("127.0.0.1");
                        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, adresse, port);
                        this.msg = "move-"+String.valueOf(GamePanel.y);
                        packet.setData(this.msg.getBytes());
                        this.client.send(packet);
                    }
                } catch(IOException e) {}
            }
        }
    }
    Et ma classe de réception :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import java.net.*;
    import java.io.*;
     
    public class GameSockIn implements Runnable {
        private DatagramSocket client;
        private String msg;
     
        public GameSockIn(DatagramSocket client) {
            this.client = client;
        }
     
        @Override
        public void run() {
            while(true) {
                try {
                    byte [] buffer = new byte[30];
                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
     
                    this.client.receive(packet);
                    msg = new String(packet.getData());
                    System.out.println(msg);
                    if(msg.contains("move")) {
                        String [] info = msg.split("-");
                        System.out.println("Hey : "+Integer.parseInt(info[1]));
                    }
                } catch (IOException e) {}
            }
        }
    }
    Evidemment je passe par un serveur, la connexion, l'échange de données se fait sans problème entre les clients et le serveur.

    Mais lorsque je bouge une de mes raquettes, le client correspondant devant recevoir l'information n'arrive pas à parser la chaine de caractère en un int.

    Voici mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Exception in thread "Thread-1" java.lang.NumberFormatException: For input string: "200"
     
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
     
    at java.lang.Integer.parseInt(Integer.java:580)
     
    at java.lang.Integer.parseInt(Integer.java:615)
     
    at GameSockIn.run(GameSockIn.java:24)
     
    at java.lang.Thread.run(Thread.java:745)
    Explication : mon client A envoie (move-200) au serveur la position de la raquette, qui renvoie à l'autre client B la position (toujours move-200), ce client B transforme le datagramme reçu (en gros un split sur "-"), et je récupère la chaine 200 pour la transformer en int.

    J'ai essayé aussi Integer.valueOf(info[1]) mais ça ne marche pas non plus, j'obtiens la même erreur.

    Merci pour votre aide éventuelle.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    getData() retourne le buffer entier, quelque soit ce qui a été lu. Il est probable que des caractères non affichables suivent ton 200 dans la chaîne msg.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msg = new String(packet.getData(), packet.getOffset(), packet.getLength())
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Salut et merci pour ta réponse.

    En effet je viens de comprendre : j'ai initialisé un buffer de 30 octets et j'envoie seulement "move-200" c'est à dire 8 octets donc les 22 restants sont "null" si je peux dire, c'est bien ça?

    La solution qui m'a été proposée est celle-ci à la lecture du buffer de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer.parseInt(info[1].replaceAll("\\D", "")

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La solution a été donnée par joel. Utiliser correctement l'offset et la longueur. Du paquet reçu.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Oui je sais, c'était une solution temporaire que l'on m'a proposé

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. quoted string not properly terminated & autres
    Par gRRosminet dans le forum SQL
    Réponses: 14
    Dernier message: 17/01/2013, 14h17
  2. Réponses: 2
    Dernier message: 10/11/2009, 15h14
  3. ORA-01756: quoted string not properly terminated
    Par hottnikks_79 dans le forum SQL
    Réponses: 14
    Dernier message: 22/05/2007, 12h02
  4. SERVEUR SOAP impossible de parser la reponse
    Par magnus2005 dans le forum Apache
    Réponses: 1
    Dernier message: 31/07/2006, 15h50

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