Partage
  • Partager sur Facebook
  • Partager sur Twitter

socket

envoyer un socket par une fonction

Sujet résolu
7 avril 2021 à 20:51:40

Bonjour, j'ai commencer depuis peu la programmation et je voulais faire un chat avec les sockets. Donc j ai commencé mais je retrouve à chaque fois la même erreur et je ne parviens pas à la comprendre. Pouvez vous m'aidez svp ou me donner des conseils.

voici le code côté clients

import socket
import cmath
from tkinter import *

#création d'une fenetre
window = Tk()
#configuration de la fenetre
window.title("My app client")
window.geometry ("1080x720")
window.minsize(480,600)
window.config(background="black")

host,port = (socket.gethostbyname(socket.gethostname()), 5566)
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def send_msg(event):
    msg_send = msgbox.get()
    print(msg_send)
    msg_send = msg_send.encode("utf8")
    socket.send(msg_send)
#fonction
try:
    socket.connect((host,port))
    print("Client connecté!")

    data ="Bonjour je suis {}".format(host)
    data = data.encode("utf8")
    socket.send(data)
    # code
    frame_msg=Frame(window,bg="black")
    msgbox=Entry(frame_msg,font=("Arial",15),bg="black",bd=4,fg="green",insertbackground="green",width=40)
    msgbox.grid(row=0,column=1)
    msgbox.bind("<Return>", send_msg)
    frame_msg.pack(expand=YES)
except ConnectionRefusedError:
    print("Le serveur n'est pas connecté")
finally:
    socket.close()
    window.mainloop()

l'erreur en question:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\infan\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "c:\Users\infan\OneDrive\Bureau\Nico\programmation\Python\test tkinter.py\client.py", line 20, in send_msg
    socket.send(msg_send)
OSError: [WinError 10038] Une opération a été tentée sur autre chose qu’un socket

et le code côté serveur

import socket
# definir le host et le port
host,port=('',5566)

# parametre du socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# permet d'associer le socket à une adress
socket.bind((host,port))
print("Le serveur est bien demarré....")

while True:
    socket.listen(10)
    conn, address = socket.accept()
    print("Un client vient de se connecter...")

    data = conn.recv(124)
    data = data.decode("utf8")
    print(data)

    msg_send = conn.recv(1024)
    msg_send = msg_send.decode("utf8")
    print(msg_send)

conn.close()
socket.close()

Bien-sûr c'est un chat particulier haha! j'aimerai juste que lorsque j'appuie sur return le message s'envoie vers le serveur

Pouvez-vous m'aidez svp?



-
Edité par NicoInfantino 7 avril 2021 à 21:37:42

  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2021 à 22:43:02

Inversez les instructions socket.close() et window.mainloop().
  • Partager sur Facebook
  • Partager sur Twitter
8 avril 2021 à 19:50:46

Ah ! Tu as résolus mon problème. Merci beaucoup.
  • Partager sur Facebook
  • Partager sur Twitter
8 avril 2021 à 19:56:13

Bonjour,

Sujet résolu

Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)
  • Partager sur Facebook
  • Partager sur Twitter
9 avril 2021 à 11:15:51

Changer aussi le nom de ta variable socket, tu écrases le module socket de même nom en la nommant ainsi.

ça ne pose pas de problème ici parce que tu n'utilises pas d'autres fonctions du module socket, mais dans le futur, ça peut poser soucis.

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2021 à 20:28:53

Bonsoir,
Je n'ai pas passé le sujet en résolu car je craignais encore avoir besoin de votre . @umfred c'est fait merci beaucoup pour le conseil. 
Bonne soirée. 

-
Edité par NicoInfantino 11 avril 2021 à 1:13:17

  • Partager sur Facebook
  • Partager sur Twitter