Je travaille sur un peu d'un projet en python. J'ai un client et un serveur. Le serveur écoute les connexions et une fois la connexion reçue, il attend l'entrée du client. L'idée est que le client peut se connecter au serveur et exécuter des commandes système telles que ls et cat. Ceci est mon code serveur:Question client/serveur Python
import sys, os, socket
host = ''
port = 50105
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: ", port)
s.listen(5)
print("Server listening\n")
conn, addr = s.accept()
print 'New connection from ', addr
while (1):
rc = conn.recv(5)
pipe = os.popen(rc)
rl = pipe.readlines()
file = conn.makefile('w', 0)
file.writelines(rl[:-1])
file.close()
conn.close()
Et voici mon code client:
import sys, socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = input('Port: ')
s.connect((host, port))
cmd = raw_input('$ ')
s.send(cmd)
file = s.makefile('r', 0)
sys.stdout.writelines(file.readlines())
Quand je démarre le serveur je reçois la sortie à droite, estimant que le serveur est à l'écoute. Mais quand je me connecte avec mon client et tapez une commande des sorties de serveur avec cette erreur:
Traceback (most recent call last):
File "server.py", line 21, in <module>
rc = conn.recv(2)
File "/usr/lib/python2.6/socket.py", line 165, in _dummy
raise error(EBADF, 'Bad file descriptor')
socket.error: [Errno 9] Bad file descriptor
Du côté client, je reçois la sortie de ls, mais le serveur obtient foiré.
Alors, quelle est exactement votre question? –
Comment puis-je faire en sorte que le client reste ouvert pour plus de commandes à entrer. Alors que le client peut continuer à entrer des commandes et qu'elles sont exécutées sur le serveur. – AustinM
Vous semblez réinventer ssh, pourquoi? – nosklo