Python - threads o sockets no me dejan terminar un server

   
Vista:
Imágen de perfil de Alejandro

threads o sockets no me dejan terminar un server

Publicado por Alejandro (84 intervenciones) el 01/03/2014 19:08:09
veran, tengo un server y un cliente, el server esta hecho con sockets y thread , y el cliente solo en sockets. El server permite la conexion de varios clientes gracias a los threads, pero el problema esta en que, el server nunca se termina, siempre esta a la espera de otro cliente aun que ya no haya ninguna conectado.
Este es el codigo del server

import socket
from threading import Thread

class Cliente(Thread):
def __init__(self, server, sc, addr):
Thread.__init__(self)
self.server = server
self.socket = sc
self.datos = addr

def run(self):

while True:
recibido = self.socket.recv(1024)
if ("adios"==recibido):
print "adios..."
self.socket.close()
break

print "Recibido:",recibido
self.socket.send(recibido)


if __name__=='__main__':
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("localhost", 9999))
server.listen(1)

while 1:
sc, addr = server.accept()
hilo = Cliente(server, sc, addr)
hilo.start()


Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

threads o sockets no me dejan terminar un server

Publicado por xve (1235 intervenciones) el 02/03/2014 10:56:07
Hola Alejandro, no te entiendo muy bien... porque quieres que el servidor deje de escuchar peticiones? en teoría tendría que estar siempre activo a la espera de nuevas conexiones, no?

Que querrías, que en el momento que no tenga mas conexiones que se cierre?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

threads o sockets no me dejan terminar un server

Publicado por Alejandro (84 intervenciones) el 02/03/2014 19:00:07
si algo asi mas o menos, ya que siempre tengo que matar el proceso para cerrar el programa. Mas bien lo que quiero implementar es, cerrar el server de una manera mas limpia cuando yo quiera, es decir, sin tener que matar el proceso a la fuerza. No se si sea posible.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

threads o sockets no me dejan terminar un server

Publicado por xve (1235 intervenciones) el 02/03/2014 21:17:19
Hace tiempo, hice un programa similar, son sockets que corría constantemente... ese esa su objetivo, pero en un momento dado, era necesario pararlo de forma correcta, si que dejara ningún socket sin cerrar correctamente.

Para ello, lo que hice, fue programarle un socket por un puerto dado, que ese socket era para administrar la aplicación, por ejemplo para pararla.
Cuando la aplicación recibia la orden de parar, cerraba los sockets adecuadamente y luego se cerraba la aplicación.

Espero que te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

threads o sockets no me dejan terminar un server

Publicado por Alejandro (84 intervenciones) el 03/03/2014 00:06:02
gracias por la ayuda. Me puse a googlear lo que me recomendaste y por fin encontre la solucion. Gracias :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

threads o sockets no me dejan terminar un server

Publicado por xve (1235 intervenciones) el 03/03/2014 07:30:55
Hola Alejandro, al final como lo hiciste??

Si nos lo puedes compartir...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

threads o sockets no me dejan terminar un server

Publicado por Alejandro (84 intervenciones) el 04/03/2014 01:42:29
import socket, sys
from threading import Thread

class Cliente(Thread):
def __init__(self, server, sc, addr):
Thread.__init__(self)
self.server = server
self.socket = sc
self.datos = addr

def run(self):

while True:
recibido = self.socket.recv(1024)
if ("adios" == recibido):
print "adios..."
self.socket.close()
sys.exit(self.server)
break

if ("cerrar" == recibido):
print "ok..."
self.server.shutdown(socket.SHUT_RDWR)
break
print "Recibido:",recibido
self.socket.send(recibido)

if __name__=='__main__':
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(("localhost", 9999))
server.listen(1)

while 1:
sc, addr = server.accept()
hilo = Cliente(server, sc, addr)
hilo.start()

programe un cliente especial para que cuando dicho cliente me envie el mensaje "cerrar", apague el socket
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

threads o sockets no me dejan terminar un server

Publicado por xve (1235 intervenciones) el 04/03/2014 08:11:55
Muchas Gracias por compartirlo Alejandro!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar