Título: Python + Sockets
Publicado por: anarquistadel89 en 3 Diciembre 2009, 02:27 am
Estoy haciendo un chat en Python y el servidor me esta dando muchos problemas... La idea es que dos clientes se conectan al servidor, y este reenvia todo lo que recibe a los dos clientes. El problema viene porque mi server esta asi: #!/usr/bin/env python import socket s = socket.socket() s.bind(('192.168.1.35',9999)) s.listen(1) sc, addr = s.accept() c = socket.socket() a = socket.socket() c.connect(('192.168.1.34', 9998)) a.connect(('192.168.1.35',9997)) while True: resp = sc.recv(1024) print resp c.send(resp) a.send(resp)
Si uno de los clientes intenta conectarse, el servidor tira error porque no puede conectarse con el otro. (Obvio que hago algo mal ya que asi solo funcionara cuando los dos clientes conecten a la vez con el server...) Que tengo mal en el diseño?
Título: Re: Python + Sockets
Publicado por: pucheto en 3 Diciembre 2009, 03:10 am
No entiendo bien esta parte... sc, addr = s.accept() c = socket.socket() a = socket.socket() c.connect(('192.168.1.34', 9998)) a.connect(('192.168.1.35',9997)) while True: resp = sc.recv(1024) print resp c.send(resp) a.send(resp)
A quien se conectan c y a?
Título: Re: Python + Sockets
Publicado por: anarquistadel89 en 3 Diciembre 2009, 03:12 am
a los clientes, si no como reenvio los mensajes?
Soy un pelin novato en Python, apenas llevo dos semanas programando en serio :-\
Título: Re: Python + Sockets
Publicado por: pucheto en 3 Diciembre 2009, 03:40 am
Acabo de hacer esto como para un ejemplo... Es un server sincronico q acepta de a 1 conexion import socket s = socket.socket()#iniciamos el socket q va a escuchar s.bind(('127.0.0.1',9999)) s.listen(2)#empezamos a escuchar totalData = "Welcom to the super server!\n" while True: sc, addr = s.accept() #accept() devuelve una tupla sc (q es el socket del cliente) addr q es una tupla ("IP", puerto) ip,p = addr print "From : " + ip data = "" + sc.recv(1024) + "\n" #leemos lo q nos manda el cliente totalData += data sc.send(totalData) #y le respondemos sc.close()#cerramos la conexion... y el ciclo vuelve a empezar...
Este server sirve para atender de a 1 conexion a la vez... Para tratar con varias podes ir usando Select, Threads.. etc.. Cliente: import socket TotalData = "" while True: s = socket.socket() #inicializamos el socket data = raw_input("<<") s.connect(("127.0.0.1",9999)) #lo conectamos al mismo puerto donde el server escucha s.send(data) #mandamos cosas TotalData = "" + s.recv(1024*4) #recivimos cosas print TotalData #mostramos la cosa s.close() #cerramos la cosa de la cosa (?) cerramos el socket del s
Repito... no busca ni prolijidad ni nada esto... es para q veas masomenos un ejemplo... si buscas bien debe haber en este foro... y en internet varios ejemplos de todo tipo...
Título: Re: Python + Sockets
Publicado por: anarquistadel89 en 3 Diciembre 2009, 03:45 am
Hasta ahi he llegado, el problema es precisamente las multiconexiones. En princpio me conformo con entender como hacerlo con dos clientes...
Lo unico que busco es un esquema para entender como codificar el servidor "/
Usando threads y select como?
Título: Re: Python + Sockets
Publicado por: pucheto en 3 Diciembre 2009, 04:01 am
import socket, select s = socket.socket()#iniciamos el socket q va a escuchar s.bind(('127.0.0.1',9999)) s.listen(5)#empezamos a escuchar input = [s] #en s vamos a poner la lista de sockets a atender totalData = "Welcom to the super server!\n" while True: rs ,ws ,es = select.select(input,[],[]) #rs read stream, write stream, error stream (creo no me acuerdo bien) for r in rs: if r is s: #si el socket es el q hace el listen, espero una conexion nueva c, addr = s.accept() ip , port = addr print "From : " + ip input.append(c) else: #sino lo atiendo try: data = r.recv(1024) disconnected = not data if not disconnected: totalData += "" + data + "\n" except disconnected: disconnected = True print r.gerpeername(), " disconnected" input.remove(r) #si se desconecto lo saco de la cola...
Algo asi? No lo probe... Sino tenes clases para servers dadas por la libreria standard de python... De ultima busca el libro fundations of python network programing
|