Programa Python P2P

Oscar
28 de Diciembre del 2007
Saludos!

No estaba en ning煤n lugar del foro este tema, as铆 que lo pongo en General. Si no va a qu铆, ruego disculpen las molestias

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