Aunque la pregunta es un poco amplia, intentaré darle un camino para que pueda lograr su objetivo.
Información de contexto
En primer lugar, debe saber cómo funciona la conexión punto a punto. Creo que esta es la parte más crucial del proceso de diseño. Sepa cómo funcionan tcp y udp y sus diferencias. ¿Cuáles son las trampas del protocolo sin conexión? ¿Cómo funciona la mensajería entre clientes, ACK? Elija un libro de la red de computadoras, la mayoría de ellos toca estos temas ampliamente. [1]
Idioma
Ahora tiene la información de contexto sobre lo que está construyendo. La mayoría de los lenguajes de programación tienen amplias bibliotecas de redes integradas. Por lo tanto, teniendo en cuenta que está utilizando Java, no necesita ninguna biblioteca adicional que no sea jdk para construir el programa p2p completo. [2]
- ¿Puedo conectar en red dos computadoras donde ambas están procesando para lograr un objetivo?
- ¿Cómo puenteo la LAN inalámbrica y con cable en la puerta de enlace qwest Q1000?
- ¿Puedo tener más de un enrutador de cable en mi casa?
- ¿Qué es ICMP? ¿Por qué deberías bloquearlo?
- ¡Ayuda! Un dispositivo que no es de mi propiedad está accediendo a mi dirección IP y puedo ver mis cuentas de correo electrónico cuando inicio sesión. ¿Qué puedo hacer?
Diseño
Inicie el programa con las funciones más simples. ¿Cuáles son los requisitos mínimos que necesita su programa? Mantenga la interfaz gráfica de usuario alejada del programa hasta que distribuya con éxito un archivo a sus compañeros. Puede agregar la interfaz gráfica de usuario más tarde porque al principio puede inflar su código por un tiempo.
Pruebas
Una cosa que aprendí mientras desarrollaba programas de red es que absolutamente haces tu prueba en diferentes máquinas. No solo ejecute varias instancias de su código para imitar a los clientes o al cliente / servidor. Es posible que nunca sepas qué golpearás incluso en la red doméstica más pequeña.
[1] – Enfoque descendente de redes informáticas http://www.amazon.com/Computer-N…
[2] – Java Networking http://docs.oracle.com/javase/tu…