Bonjour, à tous, voici un problème dont je n'arrive pas à résoudre...
Je fais une sorte de communication entre deux Client A et B.
Le protocole UDP est utilisé ici.
Le client A envoie un trame X1 au Client B.
Le client B traite la trame X2 et puis envoie une Trame X3 au Client A
Le client A traite la trame X3 et puis envoie une Trame X4 au Client B
Le client B traite la trame X4 et puis envoie une Trame X5 au Client A
Le problème est qu'il faut envoyer plusieurs fois la Trame...
Le client A envoie une seul fois la trame X1 au Client B--> Reussi
Le client B doit envoyer trois fois la trame X2 au client A pour qu'il recoit une seul fois la trame X2.
Le client A doit envoyer deux fois la trame X3 au client B pour qu'il recoit.
le Client B doit envoyer 3-4fois la trame X4 au client A --> Echec....
Pourquoi quand j'envoie un trame, dès fois il ne recoit pas ou il faut l'envoyer plusieurs fois!!
Voici mes méthodes SendUDP et ReceUDP (Récéption UDP), je ne pense pas que ca soit le problème mais je le met quand même
J'ai vérifié les adresses IP et les ports, il y a aucun problème.
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
31
32
33
34
35
36
37
38 public void SendUDP(String IP,String Port,String Data) { try { InetAddress address = InetAddress.getByName(IP); DatagramSocket socket = new DatagramSocket(); byte[] buf = new byte[500]; buf=Data.getBytes(); DatagramPacket packet = new DatagramPacket(buf,buf.length,address, Integer.parseInt(Port)); socket.send(packet); System.out.println("\n Message Envoyé"+IP+":"+Port+" Donnee"+Data+"\n"); socket.close(); } catch (Exception e) { System.out.println("Erreur d'envoie"+e+"\n"); } } public String ReceUDP(String Port) { try{ DatagramSocket socket = new DatagramSocket(Integer.parseInt(Port)); System.out.println ("Attente d'une réponse \n"); byte[] buf = new byte[500]; DatagramPacket packet = new DatagramPacket(buf,buf.length); socket.receive(packet); String Data = new String(packet.getData()); String toto1[]=Data.split("\n"); System.out.println("Voici le message de réponse:"+toto1[0]); socket.close(); return toto1[0]; } catch (Exception e) { String Data=""; System.out.println("Warning Probleme ReceUDP "+e+"\n"); return Data; } }
Si je l'envoie trois fois comme ca, le client recoit au moins une trame,mais si j'envoie deux fois ca marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SendUDP("192.168.1.5","5010",dString2+"\n");//Marche pas SendUDP("192.168.1.5","5010",dString2+"\n");// Marche pas SendUDP("192.168.1.5","5010",dString2+"\n");// Ca marche
Sinon j'ai programmé en désactivant mon firewall et mon antivirus... Pas de changement. En théorie les ports 5000 et 5010 ne sont pas pris.
Le coté positif de tout ça est la création de nouveau expression:
Donc si quelqu'un a une solution pour m'aider! (Désolé du pavé)To Trame or Not to Trame, that is the question?
Partager