¿Cómo puedo hacer un programa de intercambio de archivos punto a punto?

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]

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…

TomP2P es una biblioteca de tablas hash distribuida bastante madura que implementa (aproximadamente) Kademlia. En otras palabras, clave / valor de la tienda.

También permitirá la comunicación directa entre pares si lo necesita. Un ejemplo: puede usar el DHT como índice y transferir archivos directamente. Cómo lo haces depende de ti.

Además, proporciona funciones para UPNP, detección de firewall y reenvío de puertos.

Usar esta biblioteca te dará un gran comienzo. La mayor parte de la repetitiva está ahí para ti.

http://tomp2p.net

Estoy trabajando en ello…

Antes que nada, amigo, tienes que leer sobre redes y sus conceptos deben ser claros para ti.
Inicialmente lo creé sobre el concepto de libros donde las cosas demostraron ser muy simples

solo ip del remitente y puerto, ip del receptor: puerto taddaaa …
Pero las cosas son totalmente diferentes en la vida real.

Cuando se inventaron los protocolos para la comunicación en tiempo real, se suponía que todos debían comunicarse directamente. Si Bob quiere llamar a Alice, simplemente intercambian sus direcciones IP y la diversión podría comenzar. Bueno … eso fue entonces. Las cosas son un poco diferentes ahora porque, mientras tanto, llegaron los NAT. Ahora todos tenemos direcciones IP falsas y confiamos en nuestras puertas de enlace domésticas para traducirlas en direcciones IP reales.

P2P parece bastante fácil a primera vista, el peligro real se produce cuando hay partes comunicantes detrás de NAT (enrutador) y el 90% de los pares de casos están detrás de un NAT.

Luego lo convertí para compartir localmente en una red privada, debido a la presentación del proyecto a la universidad para que tenga un prototipo funcional para presentar.

ahora estoy agregando la función de compartir globalmente.
tienes que estudiar

  • hielo
  • aturdir
  • giro
  • partido socialdemócrata
  • sorbo

Aquí está el archivo jar de trabajo actual.

Big Share.jar

las nuevas versiones se actualizan en el mismo, así que simplemente vuelva a descargar si encuentra algún error o infórmeme.

quiero contribuir, nuevamente Inbox me.

PD-
olvidé mencionar otras cosas con las que tienes que lidiar
FireWalls, el comportamiento de NAT no está estandarizado

http://books.google.co.in/books/ … contiene un ejemplo de trabajo del programa de chat de igual a igual (usando tcp / udp). Una vez que tenga los fundas correctos, puede extender la lógica para leer / escribir bytes según lo dispuesto en las cadenas.