Cómo hacer una aplicación de intercambio de archivos punto a punto en python

Lo primero que debe hacer es aprender a usar sockets en python (o cualquier otro idioma que desee) y hacer una aplicación simple de mensajería instantánea (chat) usando sockets para conocer las cosas básicas involucradas en él.

La aplicación de chat debe poder escuchar en un puerto TCP y aceptar cualquier conexión entrante. También debería poder tomar una dirección IP y número de puerto como entrada del usuario y establecer una conexión TCP. Esto debería permitir ejecutar la aplicación en 2 máquinas diferentes y conectarse entre sí. Cualquier dato recibido de la conexión del socket debe mostrarse al usuario y cualquier mensaje que el usuario escriba debe enviarse utilizando la conexión del socket.

Un aspecto importante del uso efectivo de sockets es comprender conceptos de subprocesos múltiples. Esto ayudará a que la aplicación escuche la conexión entrante en un hilo, use otro hilo para leer los datos de la conexión establecida y tenga un hilo separado para recibir información de la interfaz de usuario.

Cuando se involucran más conexiones de sockets, se involucran más hilos como consecuencia y luego hay que aprender y comprender el uso de bloqueos de sincronización para permitir que múltiples hilos usen recursos compartidos.

Con los sockets y las redes, debe comprender que una conexión TCP puede cerrarse abruptamente debido a problemas de red desconocidos y que el diseño de su aplicación debería ser capaz de manejar tales eventos.

Una vez que haya creado una aplicación de chat basada en socket simple, el siguiente paso será estudiar las arquitecturas punto a punto existentes y pensar en la arquitectura de su aplicación p2p. Puede ver cómo funciona el intercambio de archivos Bit Torrent p2p. También puede consultar una aplicación de chat de código abierto p2p creada por mí llamada Bit Chat [1].

También puede crear una aplicación utilizando un socket que implemente cualquier protocolo de capa de aplicación como HTTP [2], FTP [3] o DNS [4] para comprender cómo desarrollar e implementar un protocolo para su aplicación.

Finalmente, en el proceso de aprendizaje, debe tratar de comprender los conceptos de red como el protocolo TCP, subred de direcciones IP, enrutamiento básico, firewalls, NAT, mapeo de puertos, UPnP, etc. para ayudar a comprender la imagen completa. Esto lo ayudará a diseñar la arquitectura de una mensajería instantánea compleja o una aplicación para compartir archivos.

Notas al pie

[1] Technitium

[2] https://www.rfc-editor.org/rfc/r…

[3] https://www.ietf.org/rfc/rfc959.txt

[4] https://www.ietf.org/rfc/rfc1035…