Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > General > Programa Python P2P
-Foros de debate

General
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Programa Python P2P
Enviado por Oscar el día 28 de diciembre de 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

 

Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network