Bonjour,
Je dois faire une simulation de routeurs... et mon problème est qu'un routeur ne peut envoyer maximum qu'un paquet LSP par seconde. Que faire? qd je met un wait(1000), les threads attendent 1seconde mais redémarre quasi en meme tps. Il faudrait qu'elle démarre une seconde l'une apres l'autre. Que faire?
Voici ce que j'ai comme résultat des LSP
LSP R2 1175799697796 R1 1 R3 9
LSP R2 1175799697796 R1 1 R3 9
LSP R3 1175799697812 R2 1 R1 9
LSP R3 1175799697828 R2 1 R1 9
LSP R1 1175799697828 R2 1 R3 9
LSP R1 1175799697828 R2 1 R3 9
Le 2ème champs est le routeur émetteur.
Le 3ème est un champs de séquence (new Date().getTime()).
J'ai 3 routeurs dans mon programme. Un routeur est une thread. Imaginons que chaque routeur à 2 voisins et qu'il faut une thread pour l'envoi vers chaque voisin. Ce qui fait 3 routeurs x 2 voisins = 6 threads. On peut remarquer pour les 2 premiers paquets que le numéro de séquence est le même alors que c'est le même routeur qui émet. Il faudrait pour le 1er paquet par ex. 1175799697796 et pour l'autre 1175799698796. qqn a une solution?? Il me semblait qu'avec une méthode synchronized, il n'y avait qu'une thread à la fois qui exécutait la méthode?
Dans ma classe routeur
Dans la classe ThreadSendLSP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 publicsynchronizedvoid trt() { ... // traitement sur chaque voisin for(int i = 0; i < vNeightbour.size(); ++i) { Neightbour n = vNeightbour.get(i); TSLSP = new ThreadSendLSP(name, vSocket.get(i), LSDB, vNeightbour, i); new Thread(TSLSP).start(); } }
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 publicsynchronizedvoid trt() { try { while(!socket.isFinished()) { if(socket.getSocket() != null) { InetAddress ipAddress = InetAddress.getByName(vNeightbour.get(indiceNeightbour).getIp()); LSP LSPPacket = new LSP(name, vNeightbour, ipAddress, vNeightbour.get(indiceNeightbour).getUDPNeightbour()); socket.getSocket().send(LSPPacket.getPacket()); } } catch (SocketException e) { System.err.println("Fermeture inattendue sur une socket"); } catch (IOException e) { System.err.println("Problème à envoie d'un paquet"); } }
Partager