CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(SOCKET) Je galère pour implémenter un algorithme en python

TitiRobinet69
TitiRobinet69
Niveau 19
23 décembre 2022 à 23:23:57

Je dois implémenter l'algorithme chang-robert dans une architecture token ring programmée avec les sockets , je ne sais même pas comment démarrer.
Précision : le code de l'architecture token ring est déjà fait, il est issu d'un ancien tp, il nous faut maintenant modifier justement le code pour implémenter un algorithme de sélection du noeud leader :(

Message édité le 23 décembre 2022 à 23:24:09 par TitiRobinet69
godrik
godrik
Niveau 30
24 décembre 2022 à 04:10:32

et ton probleme est?

TitiRobinet69
TitiRobinet69
Niveau 19
24 décembre 2022 à 12:31:36

Le 24 décembre 2022 à 04:10:32 :
et ton probleme est ?

Je n'y arrive pas, pour l'instant voilà ce que j'ai fait :
J'ai créé une class message ayant comme attribut Type, Leader_ID , Port_ID , le but est d'instances un objet de cette classes et de l'envoyer à travers les nœuds qui sont unidirectionnel, et à chaque réception le noeud qui reçoit compare son id avec le leader id du massage si il lui est supérieurs on change le leader ID du message ainsi que le port id et on l'envoie au suivant , si un noued reçoit le message avec son id comme leader id on arrête l'algorithme car le message aura fait le tour sans trouver de noued avec un plus grand id.
J'ai le concept mais je n'arrive pas à l'implémenter, dans ce programme chaque nœud a une parti serveur qui reçoit les message et une partie client qui envoie, et chaque partie est lancer dans un thread différent au début du programme.

PS: les autres nœud doivent prendre conscience de qui est le leader donc quand l'algorithme s'arrête le type de message devient "ELU" au lieu de "ELECT" , et on renvoie le message aux autres nœuds pour quil enregistre le leader Id et le port Id chez eux :oui:

4ChipsParMinute
4ChipsParMinute
Niveau 7
24 décembre 2022 à 14:55:50

il faudrait que tu expliques précisément ce qui te bloque

le multithreading ?

TitiRobinet69
TitiRobinet69
Niveau 19
02 janvier 2023 à 00:39:14

Le 24 décembre 2022 à 14:55:50 :
il faudrait que tu expliques précisément ce qui te bloque

le multithreading ?

Oui, en quelque sorte je n'arrive pas a m'imaginer comment implémenter l'algorithme dans le code qu'on a ; en gros voici le code de base qu'on a réalisé dans un tp ultérieure, l'annaux est unidirectionnelle:

NODE.PY ---------------------------------------------------------------------------------------

from Lib import *
from component_node.Part_In import *
from component_node.Part_Out import *
from random import randint

PORT_In =int(sys.argv[1])
Have_Token=int(sys.argv[2]) # 1 si le noeud a le token , 0 sinon !

ID=randint(1,66666)
Leader_ID=ID
Leader_Port=PORT_In
print("Mon ID est : ",ID)
print("Les ports et id du leader sont ",Leader_Port,Leader_ID)

Sd_Out=Part_Out()

Sd_In =Part_In(PORT_In, Have_Token, Sd_Out, Leader_ID)
Sd_In.start()

Sd_Out.port_next_Neighbor =int(input("Numéro de port du voisin: "))
Sd_Out.m=msg
Sd_Out.start()

----------------------------------------------------------------------------------------------------------------

Part_In.PY---------------------------------------------------------------------------------------------
from Lib import *

def Handle_Neighbor(con, add, t, Sortie) :
while True :
if t==0 :
msg = con.recv(1024)
print(msg.decode())
if msg.decode()=="TOKEN":
print(" Vous avez reçu le token")
print(" Vous avez le droit a la parole")
print(" Pour libérer la parole, il faut saisir le mot --TOKEN--")
while True :
expression = input("Vous pouvez vous exprimer : ")
if expression == "TOKEN" :
break
if t==1 :
input("Vous etes l'initiateur du token tapez entrer pour le libere")
Sortie.resume()
t=0

class Part_In(threading.Thread) :

def __init__(self, port, T, S, ID) :
threading.Thread.__init__(self)

self.port = port

self.T = T

self.Sortie =S

self.Leader_Id = ID

self.Leader_Port = port

self.Participant = False

self.ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try :
self.ss.bind(('127.0.0.1',self.port))

except :
print("Le Sd_In n'arrive pas a s'attacher a l'adresse & au numéro de port")
sys.exit()

self.ss.listen()

def run(self) :
self.connexion, self.add = self.ss.accept()

Handle_Neighbor(self.connexion, self.add, self.T, self.Sortie)

PART_OUT.py------------------------------------------------------------------------------------------------------
from Lib import *

class Part_Out(threading.Thread) :
def __init__(self):
threading.Thread.__init__(self)

self.m = message()
self.port_next_Neighbor=0
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.__flag = threading.Event()
self.__flag.clear() #set to false

def run(self) :
try:
self.s.connect(('127.0.0.1',self.port_next_Neighbor))
except:
print("La partie OUT n'arrive pas a se connecter au noeud voisin !")
sys.exit()

while True :
self.__flag.wait()
self.s.send(b"TOKEN")
self.__flag.clear()

def resume(self) :
self.__flag.set()

-------------------------------------------------------------------------------------------------------------------------------
Voici tout le code j'ai généré un id aléatoire pour chaque nœud, et dans mes tentative j'ai crée une class message comme celle ci :
class message():
def __init__(self,T="ELECT", IDE=0, PE=0):
self.Type=T
self.Id_Elect=IDE
self.Port_Elect=PE

et je voulais que les nœud s'envoie le message et qu'a chaque réception le nœud compare son id avec la variable Id_Elect de l'message reçu, il la change si nécessaire et puis renvoie le message aux voisin suivant jusqu'a ce qu'un des noeud reçoivent son propre id, des lors il changera le type du message sur ELU et enverra le message a ses voisin pour le informer du noeud élu !

malheureusement j'ai du mal a l'implémenter avec ce multithreading, la séparation entre l'envoie et la réception via des thread ma perdu !
merci pour votre aide et désolé du topic dégelasse :peur:

rust_lang
rust_lang
Niveau 7
02 janvier 2023 à 03:06:28

putain mais t'as pas un github plutôt

TitiRobinet69
TitiRobinet69
Niveau 19
02 janvier 2023 à 12:04:12

Le 02 janvier 2023 à 03:06:28 :
putain mais t'as pas un github plutôt

https://github.com/Sofiane2103/Change_Roberts

j'ai mis le pdf du projet pour que ça soit plus claire !

Message édité le 02 janvier 2023 à 12:04:45 par TitiRobinet69
TitiRobinet69
TitiRobinet69
Niveau 19
03 janvier 2023 à 14:08:57

:up:
Je bloque vraiment :snif:

TitiRobinet69
TitiRobinet69
Niveau 19
04 janvier 2023 à 21:51:29

:up:

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment