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 :

Utilisation des sockets : établir des connexions successives


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Septembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Septembre 2016
    Messages : 28
    Par défaut Utilisation des sockets : établir des connexions successives
    Bonjour,
    J'utilise des sockets pour échanger des données entre deux PC.
    Le PC1 sert de serveur.
    Le PC2 sert de client. Le script python "client" établi une connexion au serveur, envoi une commande et se ferme.
    Si une nouvelle commande doit être envoyée, une nouvelle connexion est établie.

    Aujourd'hui, une fois que le script client s'est connecté une première fois au serveur et a envoyé une commande, il n'arrive plus à se connecter au serveur pour envoyer une nouvelle commande.

    Auriez-vous une idée de l'origine de ce problème ?

    Voici le code du serveur :
    Code : 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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import os, sys
    import subprocess as sp
    import socket
     
    HOST = 'localhost'
    PORT = 50000
    counter = 0 #compteur de connexions etablies
     
    CommandLine = list()
    Running=True
    Ending=True
     
    ##############################################
    ###           Partie serveur               ###
    ##############################################
    #creation du socket
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    #liaison du socket a une adresse precise
    try:
        mySocket.bind((HOST, PORT))
    except socket.error:
        print("La liaison du socket a l adresse choisie, a echoue")
        sys.exit
     
    #debug = open("debug_t.txt","w")
     
    while (Ending==True):
        #attente de la requete de connexion d un client
        print("Serveur pret, en attente de requete")
        mySocket.listen(2)
     
        #Etablissement de la connexion
        connexion, adresse = mySocket.accept()
        counter += 1
        print("Client connecte, adresse IP %s, port %s" % (adresse[0], adresse[1]))
     
        #Dialogue avec le client
        msgServeur = "Vous etes connecte au serveur Codesys, envoyez vos messages"
        connexion.send(msgServeur.encode("Utf8")) 
        while (Running==True):
            msgServeur = "OK, commande recue"
            connexion.send(msgServeur.encode("Utf8"))
            msgClient = connexion.recv(1024)
            print(msgClient, "\n")
            if msgClient != "":
                    CommandLine=(msgClient.split(" "))              
                    for elem in CommandLine:
                        if elem=="Quit":
                            #debug.write("\nQuit\n")        
                            Running=False
                            Ending=True
                        if elem=="Exit":
                            #debug.write("\nExit\n")        
                            Running=False
                            Ending=False
                        if elem=="Force":
                            indice=CommandLine.index(elem)
                            if CommandLine[indice+1]=="1":
                                #print("Force app 1\n")
                                print(CommandLine[indice+3])
                            if CommandLine[indice+1]=="2":
                                #print("Force app 2\n")
                                print(CommandLine[indice+3])
     
        #Fermeture de la connexion
        #debug.close()                            
        connexion.send("fin".encode("Utf8"))
        print("Connexion interrompue")
        connexion.shutdown(socket.SHUT_RDWR)
        connexion.close()
    mysocket.close()
    Voici le code de test du client :
    Code : 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
    import socket, sys, time
     
    HOST = 'localhost'
    PORT = 50000
     
    Ending=False
     
    #creation du socket
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    #envoie d une requete de connexion au serveur
    try :
        mySocket.connect((HOST, PORT))
    except socket.error:
        print("La connexion a echouee")
        sys.exit()
    print("Connexion etablie avec le serveur")
     
    #Dialogue avec le serveur
    msgServeur = mySocket.recv(1024).decode("Utf8")
     
    print("S1>", msgServeur)
    msgClient = "Force 1 Balance TRUE "
    mySocket.send(msgClient.encode("Utf8"))
    msgServeur = mySocket.recv(1024).decode("Utf8")
    mySocket.close()
    time.sleep(5)
     
    #envoie d une requete de connexion au serveur
    try :
        mySocket.connect((HOST, PORT))
    except socket.error:
        print("La connexion a echouee")
        sys.exit()
    print("Connexion etablie avec le serveur")
    #Dialogue avec le serveur
    msgServeur = mySocket.recv(1024).decode("Utf8")
    print("S2>", msgServeur)
    msgClient = "Force 1 DD_Balance FALSE "
    mySocket.send(msgClient.encode("Utf8"))
    msgServeur = mySocket.recv(1024).decode("Utf8")
    mySocket.close()

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Dans ton code, j'ai l'impression que tu ne fermes jamais la connexion coté serveur. Du moins ton client n'envoie jamais "Quit" ou "Exit" dans le code que tu montres. Du coup je me demande si la connexion ne reste pas ouverte coté serveur et empêche toute nouvelle connexion.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Par défaut
    Le serveur reste en boucle while et ne passe pas par la fermeture du socket en cours.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/11/2013, 15h17
  2. envoyer des messages sur des sockets
    Par wafa59 dans le forum Réseau
    Réponses: 9
    Dernier message: 31/07/2012, 15h44
  3. Utiliser JOGL + shader pour des effets sur des images 2D.
    Par nouknouk dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 19/12/2007, 10h46
  4. Utilisation du Enable avec des combobox ou des listbox
    Par legos dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 19/09/2006, 22h35
  5. Réponses: 2
    Dernier message: 27/04/2006, 16h45

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