Bonjour,
Je suis débutant en Java et j'essaye de faire communiquer mon MAC avec un ARDRONE . Avant de mettre en péril le drone je fais mes essais entre deux Mac pour voir si la communication fonctionne et pour la réception ça fait 15 jours que je cherche et que je ne trouve pas ma solution . Je joins la classe ReceiverThread ou il n'y a malheureusement aucune réception et ma Classe Main.

Est ce que cette absence de réception est lié au fait que la méthode receive() soit "bloquante" ? ou bien est un problème de conception de Thread?
Pouvez vous m'éclairer sans entrer dans un vocabulaire informatique trop évolué ce n'est pas ma profession , je suis autodidacte et surtout simple passionné.
En vous remerciant d'avance.

Mon Main()

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.net.InetAddress;
import java.util.StringTokenizer;
 
public class MainClass {
 
  public static void main(String[] args) throws Exception {
 
	  CommandeAT [] Item;
		Item = new CommandeAT[11];
		Item[0] = new CommandeAT ("Decollage","AT*REF=",100,290718208);// Faire une incremenatation des N° de sequence et ... recup etat de la batterie
		Item[1] = new CommandeAT ("Atterrissage","AT*REF=",100,290717696);
		Item[2] = new CommandeAT ("Stationnaire","AT*PCMD=",100,1,0,0,0,0);
		Item[3] = new CommandeAT ("plusdegaz","AT*PCMD=",100,1,0,0,1036831949,0);
		Item[4] = new CommandeAT ("moinsdegaz","AT*PCMD=",100,1,0,0,-1110651699,0);
		Item[5] = new CommandeAT ("plusdeTangage","AT*PCMD=",100,1,1036831949,0,0,0);
		Item[6] = new CommandeAT ("moinsdeTangage","AT*PCMD=",100,1,-1110651699,0,0,0);
		Item[7] = new CommandeAT ("plusMvtLacet","AT*PCMD=",100,1,0,0,0,1036831949);
		Item[8] = new CommandeAT ("moinsMvtLacet","AT*PCMD=",100,1,0,0,0,-1110651699);
		Item[9] = new CommandeAT ("plusderoulis","AT*PCMD=",100,1,0,1036831949,0,0);
		Item[10] = new CommandeAT ("Init","AT*CONFIG=1,\"control:altitude_max\",\"2000\"");
		Instruction AT = new Instruction("","");
		int sequence=0;
		int ordre[] = {10,0,2,1};
    String ip = "192.168.0.16";
    //////////////////////////////////////////////////////////////////////////////
    				//		Codage adresse    //
    ////////////////////////////////////////////////////////////////////////////
    StringTokenizer st = new StringTokenizer(ip, ".");
    byte[] ip_bytes = new byte[4];// on traduit l'adresse ensuite en 4 octets
	if (st.countTokens() == 4)
	{
 	    for (int i = 0; i < 4; i++)
 	    {
		ip_bytes[i] = (byte)Integer.parseInt(st.nextToken());
	    }
	}
	InetAddress ia = InetAddress.getByAddress(ip_bytes); 
	System.out.println("Inet "+ia);
//////////////////////////////////////////////////////////////////////////////
	//                  Envoie de la sequence et de la reception		//
//////////////////////////////////////////////////////////////////////////////	
	 for (int j=0 ;j< ordre.length; j++)
		{	
			if (Item[ordre[j]].Codage=="AT*REF=") {AT = somme (Item[ordre[j]],sequence);} else 
			if (Item[ordre[j]].Codage=="AT*CONFIG=1,\"control:altitude_max\",\"2000\"") {AT = somme2 (Item[10]);} else// voir instruction a envoyer;
			if (Item[ordre[j]].Codage=="AT*PCMD="){AT = somme1 (Item[ordre[j]],sequence);}
			String a = AT.CodageI;
 
     	byte[] buf = (a + "\r").getBytes();
 
 
    SenderThread sender = new SenderThread(buf, ia , 5556);
    SenderThread sender1 = new SenderThread(buf, ia , 5554);
    sender.start();
    Thread.sleep(500);
    Thread receiver = new ReceiverThread(sender1.getSocket(),ia);
    receiver.start();
		}
  }
  static Instruction somme (CommandeAT Item1,int compteur)
	 {
		 Instruction CodeI = new Instruction("","");
		 CodeI.CodageI = Item1.Codage+String.valueOf(Item1.param1+compteur)+","+String.valueOf(Item1.param2);
		 CodeI.InstructionI = Item1.Instruction; 
	 return CodeI;
	 }
 
 
	static Instruction somme1 (CommandeAT Item1,int compteur)//Surdefinition de methode
	  {
		  Instruction CodeI = new Instruction("","");
		  CodeI.CodageI = Item1.Codage+ String.valueOf(Item1.param1 +compteur)+"," +String.valueOf(Item1.param2)+","+String.valueOf(Item1.param3)+","+String.valueOf(Item1.param4)+","+String.valueOf(Item1.param5)+","+String.valueOf(Item1.param6);
		  CodeI.InstructionI = Item1.Instruction;
		  return CodeI;
	  }
 
	static Instruction somme2 (CommandeAT Item1)//Surdefinition de methode
	{
		  Instruction CodeI = new Instruction("","");
		  CodeI.CodageI = Item1.Codage;
		  CodeI.InstructionI = Item1.Instruction;
		  return CodeI;
	} 
}
Ma Classe ReceiverThread:
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
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
 
class ReceiverThread extends Thread {
  DatagramSocket socket;
  int port = 5554;
 
  private boolean stopped = false;
 
  public ReceiverThread(DatagramSocket ds,InetAddress ia) throws SocketException {
    this.socket = ds;
    this.socket.connect(ia,port);
  }
 
  public void halt() {
    this.stopped = true;
  }
 
  public void run() {
    byte[] buffer = new byte[1024];
    while (true) {
      if (stopped)  
        return;
      DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
      try {
    	System.out.println(" Port : "+socket.getPort());
    	System.out.println("Inet adresse " + socket.getInetAddress());
        socket.receive(dp);
        String s = new String(dp.getData(), 0, dp.getLength());
        System.out.println(s);
        Thread.yield();
      } catch (IOException ex) {
        System.err.println(ex);
      }
    }

Encore merci pour vos Réponses