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

Python Discussion :

Problème chaines de caractères sur programme serveur


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 130
    Par défaut Problème chaines de caractères sur programme serveur
    Bonjour

    Dans le programme serveur suivant un message d'anomalie apparait comme suit

    Traceback (most recent call last):
    File "C:\Users\MJFG\Documents\Michel\Python\serveur test client serveur.py", line 59, in <module>
    connexion.send("Vous êtes connecté. Envoyez vos messages.")
    TypeError: a bytes-like object is required, not 'str'

    L'instruction incriminée est la dernière du programme

    J'ai appliqué toutes les corrections rencontrées sur les différents forum mais l'anomalie persiste.

    Si d'aucun me suggère une solution bien expliquée je l'en remercie d'avance.

    Cordialement




    Code python : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    #Définition d'un serveur réseau gérant un système de CHAT simplifié.
     # Utilise les threads pour gérer les connexions clientes en parallèle.
     
    HOST = '192.168.1.90'
    PORT = 55132
     
    import socket, sys, threading
     
    class ThreadClient(threading.Thread):
        '''dérivation d'un objet thread pour gérer la connexion avec un client'''
        def __init__(self, conn):
            threading.Thread.__init__(self)
            self.connexion = conn
     
        def run(self):
            # Dialogue avec le client :
            nom = self.getName()        # Chaque thread possède un nom
            while 1:
                msgClient = self.connexion.recv(1024)
                if msgClient.upper() == "FIN" or msgClient =="":
                    break
                message = "%s> %s" % (nom, msgClient)
                print (message)
                # Faire suivre le message à tous les autres clients :
                for cle in conn_client:
                    if cle != nom:      # ne pas le renvoyer à l'émetteur
                        conn_client[cle].send(message)
     
            # Fermeture de la connexion :
            self.connexion.close()      # couper la connexion côté serveur
            del conn_client[nom]        # supprimer son entrée dans le dictionnaire
            print ("Client %s déconnecté." % nom)
            # Le thread se termine ici
     
    # Initialisation du serveur - Mise en place du socket :
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        mySocket.bind((HOST, PORT))
    except socket.error:
        print ("La liaison du socket à l'adresse choisie a échoué.")
        sys.exit()
    print ("Serveur prêt, en attente de requêtes ...")
    mySocket.listen(5)
     
    # Attente et prise en charge des connexions demandées par les clients :
    conn_client = {}                # dictionnaire des connexions clients
    while 1:
       connexion, adresse = mySocket.accept()
        # Créer un nouvel objet thread pour gérer la connexion :
       th = ThreadClient(connexion)
       th.start()
        # Mémoriser la connexion dans le dictionnaire :
       it = th.getName()        # identifiant du thread
       conn_client[it] = connexion
       print ("Client %s connecté, adresse IP %s, port %s." %\
               (it, adresse[0], adresse[1]))
        # Dialogue avec le client :
     
       connexion.send("Vous êtes connecté. Envoyez vos messages.")

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Avez-vous essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexion.send(b'Vous êtes connecté. Envoyez vos messages.')
    ?

    Et si cela ne fonctionne pas, quel est le message d'erreur retourné pour ce cas précis ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 130
    Par défaut Problème chaines de caractères sur programme serveur
    Bonsoir

    La modification n'est pas acceptée en compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "C:\Users\MJFG\Documents\Michel\Python\serveur test client serveur.py", line 59
        connexion.send(b"Vous êtes connecté. Envoyez vos messages.")
                      ^
    SyntaxError: bytes can only contain ASCII literal characters.
    En vous remerciant

    Cordialement

  4. #4
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Salut,

    Tu dois encoder en utf-8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexion.send("Vous êtes connecté. Envoyez vos messages.".encode("utf-8"))
    Et utiliser
    à la reception des messages côté client

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Citation Envoyé par tom31 Voir le message
    Bonsoir

    La modification n'est pas acceptée en compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "C:\Users\MJFG\Documents\Michel\Python\serveur test client serveur.py", line 59
        connexion.send(b"Vous êtes connecté. Envoyez vos messages.")
                      ^
    SyntaxError: bytes can only contain ASCII literal characters.
    En vous remerciant

    Cordialement
    Alors essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexion.send(bytes("Vous êtes connecté. Envoyez vos messages.", 'utf-8'))

Discussions similaires

  1. [Débutant]Problème chaine de caractères
    Par olivier1209 dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 04/05/2007, 10h10
  2. [Format]Problème chaine de caractère
    Par e040098k dans le forum Access
    Réponses: 4
    Dernier message: 16/04/2007, 22h17
  3. problème chaine de caractère
    Par fabpeden dans le forum C
    Réponses: 6
    Dernier message: 26/03/2007, 16h16
  4. Réponses: 9
    Dernier message: 19/12/2006, 12h02

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