Foros del Web » Programando para Internet » Python »

Programa P2P Python

Estas en el tema de Programa P2P Python en el foro de Python en Foros del Web. Saludos! Estoy haciendo unas pruebas con Python sobre un programa P2P sencillo, pero yo y Python no somos comatibles (y eso que es fácil). Me ...
  #1 (permalink)  
Antiguo 28/12/2007, 09:50
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 17 años, 2 meses
Puntos: 0
Programa P2P Python

Saludos!

Estoy haciendo unas pruebas con Python sobre un programa P2P sencillo, pero yo y Python no somos comatibles (y eso que es fácil).

Me gustaría que me ayudarais con el susodicho programa.

Tengo n servidor y un cliente, aunque el cliente podrían ser infinitos. Los clientes se conectan al servidor y han de enviar su información, IP, Puerto y los puertos libres para descargar archivos y la lista de archivos que comparte. El servidor guarda esa información por si otro cliente quiere bajar un archivo de otro ciente.

Tengo algo escrito de los dos, pero me falta bastante.

Gracias de antemano

A continuación, el código del ciente:
---------------------------------------------------------------------
from optparse import OptionParser
import sys
import socket,time

parser = OptionParser()
parser.add_option("-p", "--puerto", dest="puerto" , type = int, help="Indica el puerto del servidor" )
parser.add_option("-s", "--servidor", dest="host_destino", help="Servidor a donde queremos conectar")
parser.add_option("-pp", "--puerto_propio", dest="puerto_propio", help="Indica el puerto propio para descargar")
(options, args) = parser.parse_args()

data2= #Información del cliente
data3= #Lista de archivos a compartir. Por cada fichero ha de llevar: IP,Puerto y si está libre o ocupado, siendo libre si nadie se está bajando ese archivo y ocupado si otro cliente se está bajando el archivo.

#Suponiniedo que este cliente es el que envia el archivo al otro cliente, ha de avisar al servidor de que el puerto queda ocupado. Una vez termina de mandar, aisa de que vuelve a quedar libre.
if options.puerto and options.host_destino:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((options.host_destino, options.puerto)) # Conexion al servidor, en algún lugar de Internet
while 1:
data=raw_input("Introduce La Orden Que Deseas Hacer: ") #List para coger lista, get para coger archivo, Quit para salir
if not data:
break
s.send(data+' ') # ha de enviar también data2, que es la info del cliente, y la lista de archivos (data3)
time.sleep(2)
data = s.recv(2048)
if not data:
break
print data
s.close()
--------------------------------------------------------------------

Y el código del SERVIDOR

# Echo server program

import socket,os

from optparse import OptionParser

parser = OptionParser()
parser.add_option("-p", "--puerto", dest="puerto" , type = int, help="Indica El Numero De Puerto" )
#parser.add_option("-H", "--host", dest="host_destino", help="Introduce El Nombre Del Host Destino")
(options, args) = parser.parse_args()

data=''

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('localhost', options.puerto))

s.listen(1)

conn, addr = s.accept() #Esperar y aceptar las conexiones
# Una vez conectado el cliente o clientes, recibe información IP, puerto P2p de conexion y si está libre ese puerto
# Guarda informacion
# Recibe y guarda la lista de archivos del cliente conectado
# Ha de comunicar si el puerto del ciente que manda archivo está libre o ocupado.
# Si un cliente se desconecta, borra la lista de sus archivos

while 1:

data = conn.recv(1024)
if data=='list':
# Dar la lista a quien lo demande
if data=='get':
# Conectarse a usuario libre, conociendo ip y puerto. Si no conexión, vuelva a pedir orden
if data=='quit':
# Desconexión usuario del servidor

if not data:

break

f=os.popen(data,'r')# hace un pipe con lo que le hemos enviado. Es decir, le estamos permitiendo hacer ordenes a nuestra maquina.

for linia in f:

conn.send(linia)

f.close()

conn.close()

# El servidor se cierra con un SIGTERM
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:06.