Estoy seguro de que hay bibliotecas de nivel superior que intentan ocultar la complejidad, pero el núcleo de una aplicación de red de Python serán los sockets.
Un socket es vagamente como un archivo: puede abrir uno e intentar leerlo o escribirlo; Si alguien está conectado en el otro extremo, leerá lo que escribe y leerá lo que usted escribe. Aquí hay una descripción general de alto nivel: CÓMO de programación de sockets, y algunos pequeños ejemplos concretos aquí: 17.2. socket – Interfaz de red de bajo nivel – Documentación de Python 2.7.13. Tenga en cuenta que INET y STREAM efectivamente significa IP y TCP, respectivamente.
Básicamente, el servidor:
* Crear un socket no conectado con socket ()
* Configure qué dirección y puerto escucha con bind ()
* Haga que comience a escuchar las conexiones entrantes con listen ()
* Espere a que alguien se conecte con accept ( )
- ¿Qué es un proxy y cuál es su importancia?
- ¿Cuál es el espacio de direcciones físicas?
- ¿Cómo funciona el resaltado de sintaxis en los editores y cuál es el algoritmo detrás de él?
- Cómo interceptar a todos los clientes en la red doméstica para monitorear el tráfico ascendente, por ejemplo, a través de MITM
- Cómo ocultar el uso del ancho de banda de la escuela
Un cliente hará algo similar:
* Crear un socket con socket ( )
* Conéctese a un servidor con c onnect ()
Después de eso, ambos lados pueden usar s endall () para enviar datos y r ecv () para leer datos. Tenga en cuenta que recv esperará hasta que haya algo para leer; parecerá que se cuelga hasta que eso suceda. También tenga en cuenta que esto es como protocolo de tream (suponiendo que use TCP, que probablemente debería). Eso significa que no hay “interrupciones” o “paquetes” en la transmisión: la cantidad que envía en ese momento y la cantidad de lecturas recibidas en ese momento no tienen ninguna relación. Puede enviar dos bloques de 100 bytes, y recv estaría dentro de sus derechos para darle un byte por llamada, o los 200. Por lo tanto, necesita alguna forma de saber cuándo ha recibido un mensaje completo. Puede enviar la longitud en bytes delante de cada mensaje, o tal vez hacer que cada mensaje tenga exactamente 1000 bytes de longitud, o reservar un cierto byte que signifique “fin del mensaje”, o … algo; tu decides.
Por otro lado, esto es mejor si usa SCTP en lugar de TCP; funciona de la misma manera pero le permite enviar y recibir “mensajes”. Es una pena que no sea compatible de forma nativa en Windows.