A voir également:
- Liaison Socket / Tkinter
- Copier une feuille excel dans un autre classeur avec liaison ✓ - Forum Excel
- Liaison torride - Forum Réseaux sociaux
- Comment supprimer et desinstaller liaison torride ✓ - Forum Vos droits sur internet
- Acheminé sur une liaison internationale - Forum Vos droits sur internet
- Arnaque rdv torride ✓ - Forum Consommation & Internet
3 réponses
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
346
3 mars 2020 à 17:11
3 mars 2020 à 17:11
Bonjour,
Lorsque vous postez du code, faites le avec les indentations, surtout pour du python. Il faut séléctionner le langage python dans la liste déroulante quand vous ajoutez la balise de code.
Sinon pour votre problème vous pouvez utiliser le module select comme dans l'exemple ici : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/234698-gerez-les-reseaux
Ou vous pouvez aussi utiliser un thread différent pour attendre les nouvelles connexions avec le module threading.
Lorsque vous postez du code, faites le avec les indentations, surtout pour du python. Il faut séléctionner le langage python dans la liste déroulante quand vous ajoutez la balise de code.
Sinon pour votre problème vous pouvez utiliser le module select comme dans l'exemple ici : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/234698-gerez-les-reseaux
Ou vous pouvez aussi utiliser un thread différent pour attendre les nouvelles connexions avec le module threading.
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
346
3 mars 2020 à 22:19
3 mars 2020 à 22:19
Bonjour,
Je suis désolé, je vais revenir sur mon message précédent.
Le module select permet au serveur d'accepter plusieurs clients simultanément, si ce n'est pas prévu dans votre programme le module select n'est peut-être pas nécessaire.
Vous pouvez rendre les sockets non bloquants avec
Vous pouvez ensuite utiliser la méthode after de tkinter pour appeler une fonction toutes les 100ms par exemple et à chaque fois vous testez si un nouveau client s'est connecté ou si un nouveau message est arrivé.
Si il peut y avoir plusieurs clients en même temps, vous pouvez faire la même chose mais en utilisant le module select pour vérifier si de nouveaux clients ou de nouveaux messages sont arrivés.
J'éspère que mon explication n'est pas trop confuse.
Je suis désolé, je vais revenir sur mon message précédent.
Le module select permet au serveur d'accepter plusieurs clients simultanément, si ce n'est pas prévu dans votre programme le module select n'est peut-être pas nécessaire.
Vous pouvez rendre les sockets non bloquants avec
socket.setblocking(False).
Vous pouvez ensuite utiliser la méthode after de tkinter pour appeler une fonction toutes les 100ms par exemple et à chaque fois vous testez si un nouveau client s'est connecté ou si un nouveau message est arrivé.
Si il peut y avoir plusieurs clients en même temps, vous pouvez faire la même chose mais en utilisant le module select pour vérifier si de nouveaux clients ou de nouveaux messages sont arrivés.
J'éspère que mon explication n'est pas trop confuse.
quent217
Messages postés
421
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
1 mars 2024
346
>
Arm
5 mars 2020 à 16:17
5 mars 2020 à 16:17
Pourquoi pensez-vous que les données envoyées ne sont pas reçues ?
Pouvez-vous poster le code que vous avez fait ?
Pouvez-vous poster le code que vous avez fait ?
Finalement, j'ai trouvé le problème: j'avais oublié un while True dans le thread pour qu'il se répète, ce qui faisait qu'une fois le thread démarré il ne s'éxecutait qu'une fois...
Toute cette partie liée à Socket est donc résolue (j'ai cepndant des problèmes avec le module csv maintenant...)
Voici mon code pour ceux que cela interesse:
Merci pour votre aide ;)
Toute cette partie liée à Socket est donc résolue (j'ai cepndant des problèmes avec le module csv maintenant...)
Voici mon code pour ceux que cela interesse:
import tkinter as tk from tkinter.filedialog import * from tkinter.messagebox import * import socket import csv import time import threading global socket global client global log global fichiercsv fichiercsv = 'LST.csv' def Accueil(): global root root = tk.Tk() root.title("Espace élèves") root.config(bg='#A26F65') root.geometry('1650x1050') entete = tk.Label(root, text='Bienvenue sur votre espace pedagogique !', font = ('Tw Cen MT', 30)) entete.place(x=490, y=200, anchor='w') Bouton = tk.Button(root, text ="Espace élèves",command = eleve, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=500, y=400, anchor='w') Bouton = tk.Button(root, text ="Espace professeur",command = prof, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=1000, y=400, anchor='w') Bouton = tk.Button(root, text ="Enregistrer un nouvel identifiant",command = regisID, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=680, y=450, anchor='w') Bouton = tk.Button(root, text ='Quitter',command = quitterAccueil, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1500, y=900, anchor='se' ) root.mainloop() def adminCheck(): global adminCheck adminCheck = tk.Tk() adminCheck.title("Saisir les identifiants admin") adminCheck.config(bg='#ff5050') adminCheck.geometry('400x400') entete = tk.Label(adminCheck, text='Saisissez vos identifiants\nadmin', font = ('Tw Cen MT', 18)) entete.place(x=95, y=80, anchor='w') global IDadmin IDadmin = tk.StringVar() Champ = tk.Entry(adminCheck, textvariable= IDadmin, bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=145, y=140, anchor='w') global MDPadmin MDPadmin = tk.StringVar() Champ = tk.Entry(adminCheck, textvariable= MDPadmin,show= '*', bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=145, y=180, anchor='w') Bouton = tk.Button(adminCheck, text ="Valider",command = adminverif, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=170, y=260, anchor='w') Bouton = tk.Button(adminCheck, text ="Quitter",command = quitterAdm, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=172, y=330, anchor='w') adminCheck.mainloop() def adminverif(): global IDadmin2 global MDPadmin2 IDadmin2 = IDadmin.get() MDPadmin2 = MDPadmin.get() fichiercsv2 = open(fichiercsv, 'r',encoding='utf 8') csvRead = csv.reader(fichiercsv2, delimiter=',') for row in csvRead : if row : if row[0] == "admin" : if row[1] == MDPadmin2 : showinfo("Validation","Identifiants corrects!") regisID() else: showwarning('Erreur','Mot de passe incorrect !') MDPadmin.set('') else: showwarning('Erreur','Identifiant inconnu !') MDPadmin.set('') IDadmin.set('') def regisID(): global regisIDD regisIDD = tk.Tk() regisIDD.title("Enregistrer un nouvel identifiant") regisIDD.config(bg='#ff5050') regisIDD.geometry('400x400') entete = tk.Label(regisIDD, text='Saisissez vos identifiants', font = ('Tw Cen MT', 18)) entete.place(x=95, y=80, anchor='w') global IDareg IDareg = tk.StringVar() Champ = tk.Entry(regisIDD, textvariable= IDareg, bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=145, y=140, anchor='w') global MDPareg MDPareg = tk.StringVar() Champ = tk.Entry(regisIDD, textvariable= MDPareg, bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=145, y=180, anchor='w') Bouton = tk.Button(regisIDD, text ="Valider",command = regcl, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=170, y=260, anchor='w') Bouton = tk.Button(regisIDD, text ="Quitter",command = quitterReg, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=172, y=330, anchor='w') regisIDD.bind('<Return>', regcl2) regisIDD.mainloop() def regcl(): global newuser global newpss newuser = IDareg.get() newpss = MDPareg.get() print(newuser) print(newpss) fichiercsv2 = open(fichiercsv, 'a',encoding='utf-8', newline ='') cswri = csv.writer(fichiercsv2) cswri.writerow((newuser,newpss)) fichiercsv2.close() showinfo("Validation","Identifiants enregistrés") regisIDD.destroy() def regcl2(event): regcl() def prof(): quitterAccueil() global prof1 prof1 = tk.Tk() prof1.title("Espace professeurs") prof1.config(bg='#A26F65') prof1.geometry('1650x1050') prof1.bind('<Return>', VerifElPr) global usernamePr usernamePr= tk.StringVar() Champ = tk.Entry(prof1, textvariable= usernamePr, bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=780, y=300, anchor='w') global Motdepasseprof Motdepasseprof = tk.StringVar() Champ = tk.Entry(prof1, textvariable= Motdepasseprof, show='*', bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=780, y=330, anchor='w') Bouton = tk.Button(prof1, text ="Quitter",command = quitterMDPprof, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1500, y=900, anchor='w') Bouton = tk.Button(prof1, text ="Valider",command = VerificationProf, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=805, y=400, anchor='w') entete = tk.Label(prof1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20)) entete.place(x=700, y=200, anchor='w') Bouton = tk.Button(prof1, text ="Retour",command = RetourAccueilPr, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1400, y=900, anchor='w') prof1.mainloop() def eleve(): quitterAccueil() global eleve1 eleve1 = tk.Tk() eleve1.title("Espace élèves") eleve1.config(bg='#A26F65') eleve1.geometry('1650x1050') eleve1.bind('<Return>', VerifElMo) global usernameEl usernameEl= tk.StringVar() Champ = tk.Entry(eleve1, textvariable= usernameEl, bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=780, y=300, anchor='w') global Motdepasseeleve Motdepasseeleve= tk.StringVar() Champ = tk.Entry(eleve1, textvariable= Motdepasseeleve, show='*', bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=780, y=330, anchor='w') Bouton = tk.Button(eleve1, text ="Valider",command = VerificationEleve, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=805, y=400, anchor='w') Bouton = tk.Button(eleve1, text ="Quitter",command = quitterMDPeleve, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1500, y=900, anchor='w') Bouton = tk.Button(eleve1, text ="Retour",command = RetourAccueilEl, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1400, y=900, anchor='w') entete = tk.Label(eleve1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20)) entete.place(x=700, y=200, anchor='w') eleve1.mainloop() def VerifElMo(event): VerificationEleve() def VerificationEleve(): global motdepasseEl global usernameEl2 motdepasseEl = Motdepasseeleve.get() usernameEl2 = usernameEl.get() fichiercsv2 = open(fichiercsv, 'r',encoding='utf 8') csvRead = csv.reader(fichiercsv2, delimiter=',') for row in csvRead : if row : if row[0] == usernameEl2 : if row[1] == motdepasseEl : showinfo("Validation","Identifiants corrects!") eleve2() else: showwarning('Erreur','Mot de passe incorrect !') Motdepasseeleve.set('') else: showwarning('Erreur','Identifiant inconnu !') Motdepasseeleve.set('') usernameEl.set('') def VerifElPr(event): VerificationProf() def VerificationProf(): global motdepassePr global usernamePr2 motdepassePr = Motdepasseprof.get() usernamePr2 = usernamePr.get() fichiercsv2 = open(fichiercsv, 'r',encoding='utf 8') readCsv = csv.reader(fichiercsv2, delimiter=',') for row in readCsv: if row : if row[0] == usernamePr2 : if row[1] == motdepassePr : showinfo("Validation","Identifiants corrects!") prof2() else: showwarning('Erreur','Mot de passe incorrect !') Motdepasseprof.set('') else: showwarning('Erreur','Identifiant inconnu !') Motdepasseprof.set('') usernamePr.set('') def prof2(): quitterMDPprof() global prof2 prof2 = tk.Tk() prof2.title("Espace professeurs") prof2.config(bg='#A26F65') prof2.geometry('1650x1050') global gifdict gifdict={} entete = tk.Label(prof2, text='Bienvenue à toi jeune prof', font = ('Tw Cen MT', 25)) entete.place(x=650, y=200, anchor='w') global exoaenvoyer entete = tk.Label(prof2, text='Envoyer une image', font = ('Tw Cen MT', 15)) entete.place(x=250, y=300, anchor='w') entete = tk.Label(prof2, text='Envoyer un texte', font = ('Tw Cen MT', 15)) entete.place(x=1250, y=300, anchor='w') Bouton = tk.Button(prof2, text ="Quitter",command = quitterProf, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1500, y=900, anchor='w') Bouton = tk.Button(prof2, text ="Ouvrir une Image",command = OuvrirImage, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=250, y=500, anchor='w') exoaenvoyer = tk.StringVar() Champ = tk.Entry(prof2, textvariable= exoaenvoyer, bg ='bisque', fg='black', justify='center') Champ.focus_set() Champ.place(x=1170, y=400, anchor='w', width = 300) Bouton = tk.Button(prof2, text ="Envoyer",command = envoyertext, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white") Bouton.place(x=1280, y=500, anchor='w') prof2.mainloop() def eleve2(): quitterMDPeleve() global eleve2 eleve2 = tk.Tk() eleve2.title("Espace élèves") eleve2.config(bg='#A26F65') eleve2.geometry('1650x1050') global logRec Consigne = tk.StringVar() logRec = tk.Text(eleve2, width=120, height=15, takefocus=0, font = ('Tw Cen MT', 15)) logRec.place(x=230, y=200, anchor='w') env = tk.Label(eleve2, text='Consignes\nenvoyées', font = ('Tw Cen MT', 15), justify = 'center') env.place(x=70, y=80, anchor='w') logRep = tk.Text(eleve2, width=120, height=15, takefocus=0, font = ('Tw Cen MT', 15)) logRep.place(x=230, y=700, anchor='w') rep = tk.Label(eleve2, text='Réponses', font = ('Tw Cen MT', 15)) rep.place(x=70, y=590, anchor='w') Bouton = tk.Button(eleve2, text ="Copier la consigne",command = copyCons, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=800, y=410, anchor='w') Bouton = tk.Button(eleve2, text ="Envoyer la réponse",command = sendRep, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=800, y=910, anchor='w') Bouton = tk.Button(eleve2, text ="Quitter",command = quitterEleve2, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white") Bouton.place(x=1500, y=920, anchor='w') global threadEl threadEl = threading.Thread(target=verifsock) threadEl.daemon = True # without the daemon parameter, the function in parallel will continue even your main program ends threadEl.start() eleve2.mainloop() def verifsock(): global socket2 socket2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) hostname = socket.gethostbyname(socket.gethostname()) socket2.bind((hostname, 15555)) while True: socket2.listen(5) client, address = socket2.accept() print ("{} connected".format( address )) response = client.recv(255) response2 = response.decode("utf-8") if response2 != "": logRec.insert(END, str(response2)+"\n") else: return def copyCons(): print("Aha") def sendRep(): print("Wsh") def OuvrirImage(): filename = tk.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('gif files','.gif'),('all files','.*')]) print(filename) photo = PhotoImage(file=filename) gifdict[filename] = photo # référence print(gifdict) def envoyertext(): exot = exoaenvoyer.get() hote = "172.16.2.220" port = 15555 global socket socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket.connect((hote,port)) print ("Connecté aux élèves") exot2 = bytes(exot, encoding='utf-8') socket.send(exot2) print("Envoyé") socket.close() def quitterAdm(): adminCheck.destroy() def quitterReg(): regisIDD.destroy() def quitterEleve2(): eleve2.destroy() def quitterAccueil(): root.destroy() def quitterProf(): prof2.destroy() def quitterMDPprof(): prof1.destroy() def quitterMDPeleve(): eleve1.destroy() def RetourAccueilEl(): eleve1.destroy() Accueil() def RetourAccueilPr(): prof1.destroy() Accueil() Accueil()
Merci pour votre aide ;)
3 mars 2020 à 18:56
Excusez moi pur l'indentation je n'ai pas fait attention :/
Sinon le module select à l'air de pouvoir faire l'affaire mais je ne sais pas comment l'implémenter à mon code... Pouvez vous me donner des pistes ?
Merci beaucoup
Voici mon code (indenté):