• Jueves 28 de Marzo de 2024, 13:50

Autor Tema:  Programa P2p Python  (Leído 1556 veces)

oca_008

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Programa P2p Python
« en: Viernes 28 de Diciembre de 2007, 16:34 »
0
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