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 :
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
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()
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()
Partager