IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Mini-Chat avec TCP


Sujet :

Réseau/Web Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Mini-Chat avec TCP
    Bonsoir à toutes et à tous !

    Alors voilà je me permet de venir sur ce forum afin de trouver de l'aide à mon petit soucis ^^

    J'aimerais programmer un mini chat avec connexion TCP en langage Python

    Je vous donne le code Serveur :

    import socket
    import select

    hote = ''127.0.0.1"
    port = 1234

    connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_principale.bind((hote, port))
    connexion_principale.listen(5)
    print("Le serveur écoute à présent sur le port {}".format(port))

    serveur_lance = True
    clients_connectes = []
    while serveur_lance:
    # On va vérifier que de nouveaux clients ne demandent pas à se connecter
    # Pour cela, on écoute la connexion_principale en lecture
    # On attend maximum 50ms
    connexions_demandees, wlist, xlist = select.select([connexion_principale],
    [], [], 0.05)

    for connexion in connexions_demandees:
    connexion_avec_client, infos_connexion = connexion.accept()
    # On ajoute le socket connecté à la liste des clients
    clients_connectes.append(connexion_avec_client)

    # Maintenant, on écoute la liste des clients connectés
    # Les clients renvoyés par select sont ceux devant être lus (recv)
    # On attend là encore 50ms maximum
    # On enferme l'appel à select.select dans un bloc try
    # En effet, si la liste de clients connectés est vide, une exception
    # Peut être levée
    clients_a_lire = []
    try:
    clients_a_lire, wlist, xlist = select.select(clients_connectes,
    [], [], 0.05)
    except select.error:
    pass
    else:
    # On parcourt la liste des clients à lire
    for client in clients_a_lire:
    # Client est de type socket
    msg_recu = client.recv(1024)
    # Peut planter si le message contient des caractères spéciaux
    msg_recu = msg_recu.decode()
    print("Reçu {}".format(msg_recu))
    client.send(b"5 / 5")
    if msg_recu == "fin":
    serveur_lance = False

    print("Fermeture des connexions")
    for client in clients_connectes:
    client.close()

    connexion_principale.close()



    Et voilà le code client :

    import socket

    hote = "localhost"
    port = 12800

    connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_avec_serveur.connect((hote, port))
    print("Connexion établie avec le serveur sur le port {}".format(port))

    msg_a_envoyer = b""
    while msg_a_envoyer != b"fin":
    msg_a_envoyer = input("> ")
    # Peut planter si vous tapez des caractères spéciaux
    msg_a_envoyer = msg_a_envoyer.encode()
    # On envoie le message
    connexion_avec_serveur.send(msg_a_envoyer)
    msg_recu = connexion_avec_serveur.recv(1024)
    print(msg_recu.decode()) # Là encore, peut planter s'il y a des accents

    print("Fermeture de la connexion")
    connexion_avec_serveur.close()



    Donc on arrive à se connecter au serveur avec plusieurs clients et le serveur reçois bien les messages des clients. Mais je souhaiterais pouvoir mtn faire en sorte que le serveur envois les messages reçus aux autres clients avec la fonction "select". Sauf que voilà je suis bloqué je sais pas quoi rajouter au code. Je sais qu'il manque pas grand chose mais bon ... Voilà,

    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,

    Si le but n'est pas de jouer avec la fonction select, pourquoi ne pas essayer d'utiliser le module asynchat? En plus, il y a un tuto ici

    Sinon un tuto sur select est ici

    - W

    PS: Pensez à la balise "code", sinon pas grand monde lira votre code.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Probleme: Chat avec les sockets en tcp avec du C
    Par mansour67 dans le forum Réseau
    Réponses: 6
    Dernier message: 06/07/2012, 20h26
  2. Réaliser un Chat avec support IP
    Par Sub0 dans le forum Développement
    Réponses: 12
    Dernier message: 14/07/2006, 10h59
  3. [xp] chat avec un logiciel open source ?
    Par sali dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 19/02/2006, 14h45
  4. Comment créer un chat avec VB 6 ?
    Par magic8392 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 21/10/2005, 15h37
  5. Le chat (avec les sockets) sans frames.
    Par azmeuk dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2005, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo