Foros - Stratos

Programadores => Programación en red => Mensaje iniciado por: KaMuY en 15 de Febrero de 2006, 02:04:47 PM

Título: P2p
Publicado por: KaMuY en 15 de Febrero de 2006, 02:04:47 PM
 Quiero implementar un chat simple P2P, ¿alguien me dice por donde podria empezar?
¿Librerias, consejos, documentación, teorias, tutoriales?
Título: P2p
Publicado por: Warchief en 15 de Febrero de 2006, 03:32:02 PM
Cita de: "KaMuY"Quiero implementar un chat simple P2P, ¿alguien me dice por donde podria empezar?
¿Librerias, consejos, documentación, teorias, tutoriales?
¿Para que SO? ¿Qué lenguaje?

En cualquier caso, con sockets a pelo.
Unix, por ejemplo: http://www.ecst.csuchico.edu/~beej/guide/i.../ipc/usock.html
Windows, por ejemplo: http://burks.bton.ac.uk/burks/pcinfo/progd...ock/winsock.htm

Un chat es bastante sencillo.
Título: P2p
Publicado por: KaMuY en 16 de Febrero de 2006, 12:22:56 PM
 es para win32 aunque si la libreria es multiplataforma mejor :P

¿Sockets a pelo?

Se un chat es bastante simple pero la idea es aprender conceptos y tal... para saber programar estructuras P2P y como trabajarlas.

Me gustaria algo mas del razonamiento que te hace decidirte por una elecion o otra :P

Muchas gracias por tu respuesta :)

Título: P2p
Publicado por: Warchief en 16 de Febrero de 2006, 04:08:01 PM
 Lo sockets son dependientes del sistema operativo. Son unas pocas llamadas que permiten por ejemplo: escuchar por un puerto (para que te conecten), abrir conexión hacia un puerto de otro ordena, enviar datos, etc.
Para win32 Winsock
Con sockets a pelo me refiero a que son de bajo nivel, la estructura te la tienes que montar tú.

También puedes probar con algo como: (yo no lo he tocado)
http://www.alhem.net/Sockets/index_spanish.html , que tiene ejemplos de chats:
http://www.alhem.net/project/example3/index.html
http://www.alhem.net/project/example7/index.html

Sobre la arquitectura P2P en vez de Cliente/Servidor, tendrás que pensar cómo hacerlo (por ejemplo un servidor apunta direcciones de usuarios, un servidor apunta direcciones de otros servidores, cada cliente se guarda su contactos e intenta lanzarse con ellos al chat (por ip),...).

Puedes fijarte en sitios como:
http://java.sun.com/developer/technicalArt...orking/jxta2.0/
Diagrama del chat P2P
Si conoces java JXTA: http://www.jxta.org/


Son sólo indicaciones, nunca he hecho ningún chat p2p :)
Título: P2p
Publicado por: KaMuY en 20 de Febrero de 2006, 11:47:23 AM
 Hola Warchief, la idea es esta que tu comentas. el problema es que no consigo hacer funcionar la libreria JXTA, además he visto que existe una implementación de la libreria en C.

Has echo algo con JXTA, sabes como puedo iniciarme?

Una de mis dudas es saber si sale a cuenta aprender como va JXTA o hacer la estructura de Red a pelo con sockets... :P


__________________________________________________________
Puedes fijarte en sitios como:
http://java.sun.com/developer/technicalArt...orking/jxta2.0/
Diagrama del chat P2P
Si conoces java JXTA: http://www.jxta.org/
__________________________________________________________
Título: P2p
Publicado por: Warchief en 20 de Febrero de 2006, 12:31:07 PM
 Hombre, si lo que dominas es java yo me iría a jxta, porque parece una abastracción de los sockets (recuerda que los sockets no son más que un puñado de funciones como las de ficheros (open/close/read/write y algunas más de control select/bind/etc). En jxta no he hecho nada; lo único parecido que he hecho en java ha sido con JMF (Java Media Framework, que está bien si quieres añadir voz al chat XD).

De la implementación a C ni idea, he visto el port a C#, pero nada más.

También puedes echar un vistazo a otras libs como RakNet o Hawk NL (no, no he probado ninguna).

Si el objetivo es aprender y lo que conoces es C:
Como un chat no es demasiado complicado, como primera aplicación se puede hacer con sockets. Una vez que estés conforme con la programación de red, se puede pensar en un objetivo mayor o incluso volver a hacer el chat usando una de las librerías.

Si vuelves a considerar sockets:
Guía estupenda (pero de Unix): http://www.arrakis.es/~dmrq/beej/index.html
Artículos Winsock en Gamedev: http://www.gamedev.net/reference/list.asp?...tegoryid=30#298

Si conoces java, JXTA. Si conoces C, sockets. Si quieres aprender librería concreta, la librería.

¿Por qué no puedes hacer correr JXTA?
Título: P2p
Publicado por: KaMuY en 22 de Febrero de 2006, 11:11:54 AM
 A ver, domino C, java etc etc.. soy Eng. informatico Superior.

Esta noche intentare probar con JXTA algo.. el problema es que me petaba las librerias.

ya dire algo
Título: P2p
Publicado por: Warchief en 22 de Febrero de 2006, 04:25:19 PM
Cita de: "KaMuY"Esta noche intentare probar con JXTA algo.. el problema es que me petaba las librerias.
:huh: Cuenta pues qué error da, etc, a ver si lo sacamos.
Título: P2p
Publicado por: KaMuY en 08 de Marzo de 2006, 09:52:54 AM
 Creo que lo are todo con sockets a pelo :P

Ahora me surge una duda, como hacen programas ¿como el kazaa para que no sea necesario abrir puertos y los peers se comuniquen?

Tenia entendido que normalmente en una P2P cada peer era servidor y cliente a la vez, por lo tanto en algún momento tendría que estar escuchando una conexión entrante, ¿no?

O trabajan con UDP... o ¿como lo hacen?

¿Alguien lo sabe?
Título: P2p
Publicado por: FANatiko en 08 de Marzo de 2006, 10:09:11 AM
 Usan UDP, más que nada porque es algo más eficiente y como se verifican los chunks y se pueden pedir trozos concretos. Para atravesar NAT lo más normal es usar STUN (aqui hay un algoritmo algo más simple). Esto se salta un NAT sin muchos problemas, ahora... firewalls y proxys hay que hacer cosas mas sofisticadas.
Título: P2p
Publicado por: KaMuY en 08 de Marzo de 2006, 12:14:27 PM
 a ver si lo entendí bien:

La idea es que  cada peer comience una conexión UDP por un puerto determinado. Entonces cada peer tendrá abierto un puerto por el que podrá recibir paquetes UDP. Entonces solo queda intercambiar paquetes entre los peers a los puertos que hemos abierto en cada maquina al iniciar una conexión..

¿Es esto? :S
Título: P2p
Publicado por: Zaelsius en 08 de Marzo de 2006, 12:24:57 PM
 Otra alternativa(bueno, al menos una manera de "abrir los puertos" del usuario) es UPnP (Wikipedia.org), que también tiene sus propios problemas. El cliente de bittorrent Azureus lo implementa, aunque depende del router si viene activado por defecto o no.
Título: P2p
Publicado por: FANatiko en 08 de Marzo de 2006, 12:51:56 PM
Cita de: "KaMuY"La idea es que  cada peer comience una conexión UDP por un puerto determinado.
La idea es que conectas con un servidor, que intercambia los puertos que el router ha asignado a la conexion, y utilizas estos puertos abiertos para conectar con el otro. Con routers hardware suele funcionar... aunque si tu programa tiene mucho exito el servidor puede soportar bastantes conexiones.
Título: P2p
Publicado por: Warchief en 08 de Marzo de 2006, 01:41:39 PM
 accept te da un nuevo puerto automáticamente.

Me explico:
1) Servidor: Se hace bind del puerto X, esto pone el puerto X a escuchar
2) Cliente: Se hace opensocket que te da un puerto libre Z (no importa cuál)
3) Cliente: Hace connect al puerto X del Servidor (debe conocer su ip y puerto)
4) Servidor: accept escucha la petición del cliente y crea un puerto nuevo Y (libre, no importa cuál)
5) Los sockets Z e Y quedan emparejados. Lo que el cliente envía por Z lo recibe el servidor por Y
(X sigue escuchando)

Por tanto sí, tienes que poner a escuchar un puerto X.

La obtención de la ip y puerto del servidor es otra historia. En GNUtella se hace con caché. En Emule/Edonkey con los servidores ed2k, el nodes.dat (o algo así) de contactos para Kademlia y la transmisión de nuevas fuentes al conectar a otro.

En emule hay opciones para desactivar UDP, que es lo que usa Kademlia. Creo que ed2k usa TCP.
Título: P2p
Publicado por: elfer en 12 de Junio de 2007, 11:59:13 PM
por casualidad he llegado a este foro que por lo que veo hay mucho nivel...jeje, yo soy totalmente aficionado y por motivos personales he realizado una pagina web, www.renegimenez.com y la verdad que no tengo ni idea de programacion ni de na de eso, pero me seria interesante poner dos salas de chat, una para los amigos y otra para hablar de deporte, he realizado varias pruebas y no me termina de convencer, y no sé, se me ha ocurrido "pedir ayuda" por aqui a ver si alguien me podia configurar uno para meterlo en la pagina o asesorarme de donde puedo cogerlo para que funcione siempre bien...muchas gracias y espero alguna respuesta