Me explico:
Es un programa de control remoto, donde se necesita una contraseña para acceder al ordenador a controlar. Esta contraseña es enviada del servidor al cliente, este analiza si es o no es correcta y le envia el resultado al servidor de nuevo para que autorize el control (De momento solo he implementado el control de la cmd).
El problema viene, cuando el servidor pasa de esperar la conexion del cliente, a conectarse el al cliente (Es como si se intercanviaran los papeles, ya lo veran en el codigo), el servidor se me cierra sin opcion a ver el error. Lo mismo con el cliente, pero este no se que error le salta que tambien le hace cerrarse.
Otro tema que no consigo solucionar es el de que el cliente solo se mantiene si el servidor se mantiene abierto. Si el servidor se cierra, el cliente se cierra (No se porque, la verdad)
Bueno, si me podeis ayudar con el codigo o aconsejar otro camino, soy todo oidos.
Ahi va el codigo:
Servidor:
Código:
Cliente (Importa todo tipo de librerias, ya os he dicho que he hecho de todo, pero nada):import socket def actions(): print "Lista de comandos:" print "CMD = cmd" print "Parar = stop" def commands(): print "Lista de comandos CMD:" print "Cambiar de accion = stop" def establecer_conexion(contador): socket3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket3.connect((socket.gethostname(), 4545)) data, server = socket3.recvfrom(100) raw_input() if data == "correcto": print "Contrasena correcta" contador += 1 body(contador) if data == "incorrecto": print "Contrasena incorrecta" contador = 0 body(contador) return contador def aceptar_conexiones(contador): miSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) miSocket.bind((socket.gethostname(), 4545)) miSocket.listen(1) while 1: channel, details = miSocket.accept() print "Se ha conectado: ", details if contador == 2: accion = raw_input("Escribe la accion: ") channel.send(accion) if accion == "cmd": finalizar = "stop" commands() comandos = "" while comandos != finalizar: comandos = raw_input("Escribe los comandos: ") channel.send(comandos) if contador == 0: contrasena = raw_input("Escribe la contrasena: ") channel.send(contrasena) contador += 1 body(contador) def body(contador): if contador == 0: aceptar_conexiones(contador) if contador == 1: establecer_conexion(contador) if contador == 2: aceptar_conexiones(contador) class mainprog: contador = 0 body(contador)
Código:
Agradezco mucho la ayuda que me podais prestar.import socket import os import string import sys from _winreg import * def aceptar_conexiones(verificador): socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket1.bind((socket.gethostname(), 4545)) socket1.listen(1) while 1: channel, details = socket1.accept() if verificador == "si": channel.send("Correcto") socket1.close() establecer_conexion2(verificador) if verificador == "no": channel.send("Incorrecto") socket1.close() def establecer_conexion(): socket2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket2.connect((socket.gethostname(), 4545)) data, server = socket2.recvfrom(100) while 1: if data == "123456": verificador = "si" socket2.close() aceptar_conexiones(verificador) if data != "123456": verificador = "no" socket2.close() aceptar_conexiones(verificador) def establecer_conexion2(verificador): miSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) miSocket.connect((socket.gethostname(), 4545)) if verificador == "si": while 2: data2, server = miSocket.recvfrom(100) if data2 == "cmd": print "cmd seleccionado" data3, server = miSocket.recvfrom(100) os.system(data3) def body(): establecer_conexion() class mainprog: body()
Saludos