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 :
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
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) {} } } }
Evidemment je passe par un serveur, la connexion, l'échange de données se fait sans problème entre les clients et le serveur.
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) {} } } }
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 :
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.
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)
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.
Partager