[Python] Underch4t v1.0 (Parte 2)

Iniciado por WhiZ, Diciembre 19, 2015, 05:33:38 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 19, 2015, 05:33:38 PM Ultima modificación: Diciembre 24, 2015, 10:57:19 AM por Expermicid


UnderCh4t




Comenzamos la segunda entrega de este mini tutorial: creando nuestro propio chat con Python. El mío se llama UnderCh4t y si es la primera vez que escuchás hablar de él,  te invito a que pases por No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y lo conozcas ;)





INTERFAZ DE CONEXIÓN



Hasta ahora no hemos hecho mucho: sólo creamos la estructura general de nuestro servidor (que, como veremos a lo largo del curso, irá sufriendo algunas modificaciones) y hemos desarrollado el método que nos permite crear el socket que vamos a utilizar para interactuar con nuestros clientes.

Si nos basamos en el método ejecutar (método guía del programa), ahora le toca el turno al método bind. Veamos primero su código:

Código: python
def _bind(self):
    msj = "Estableciendo interfaz de conexión ({0}:{1})"
    self._mostrar_info(msj.format(self.__ip, self.__puerto))
    try:
        self.__servidor.bind((self.__ip, self.__puerto))
    except Exception as e:
        self._mostrar_error(e, critico=True)


Nuevamente, dejando de lado los logs y el manejo de errores, lo único que nos interesa en este método es la siguiente línea:

Código: python
self.__servidor.bind((self.__ip, self.__puerto))


Como siempre, lo primero que haremos será pegarle una ojeada a la No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. En ella, podemos ver que el método bind tiene como objetivo establecer una interfaz de conexión, es decir, enlazar el socket a una dirección, la cual variará según la familia de dirección que utilicemos.

CitarEsto ya lo vimos en la primera parte pero para los que todavía no saben de qué estamos hablando, vamos con un rápido repaso. Cuando creamos un socket, debemos indicar cómo queremos que sea, es decir, qué familia, tipo y protocolo queremos que utilice. Dentro de las familias de sockets, las más utilizadas son:
    - AF_INET (IPv4)
    - AF_INET (IPv6)
    - AF_UNIX (utilizada para comunicación entre procesos en una misma computadora).

Entonces, cuando creamos un socket, se le asigna una familia de direcciones pero no una dirección en particular. Para esto, debemos llamar al método bind, pasándole como argumento la dirección que queremos asignar al socket.

Como dijimos antes, cada familia de sockets tiene su forma de indicar esta dirección. La familia AF_INET, por ejemplo, utiliza una tupla con dos valores: host (dominio o dirección IP) y puerto. El código quedaría así:

Código: python
import socket
mi_socket = socket.socket(AF_INET, SOCK_STREAM)
direccion = ("127.0.0.1", 8000)
mi_socket.bind(direccion)


En este caso, primero creamos el socket - indicamos familia y tipo de socket (al protocolo, no indicado, lo determina el sistema)- y luego vinculamos el socket a una dirección. La dirección es una tupla que contiene una dirección IP (127.0.0.1) y un puerto (8000).

Con respecto a las direcciones de las otras familias, debido a que se escapa a los objetivos de este tutorial, no vamos a decir mucho; simplemente que la familia AF_UNIX utiliza una cadena para indicar la dirección, mientras que la familia AF_INET6 requiere una tupla con cuatro valores: host, puerto, flujo de información e identificador de ámbito. No se preocupen que esto no es algo que tengan que saber para este curso. Sin embargo, si alguno tiene ganas de aprender más del asunto, aquí dejo algunos links de interés: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.




Bueno, esto es todo por ahora. Originalmente, mi idea era hacer una segunda parte más extensa pero, considerando que lo que viene es un poco más complejo, decidí hacer una entrega más corta que no los complique y les permita entender estos nuevos conceptos sin dificultad.

Vayan leyendo y repasando estas dos primeras partes que les van a servir de base para la entrega que viene.  ;)

Saludos!
WhiZ


Diciembre 20, 2015, 03:22:32 PM #1 Ultima modificación: Diciembre 20, 2015, 03:24:48 PM por Barlan
Se te escapó un (
Código: python
msj = "Estableciendo interfaz de conexión ({0}:{1})")


Se aprende mucho con estos post, se agradece WhiZ  :D
Saludos!


Genial @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta he estado leyendo mucho sobre este fabuloso modulo y esto me cae como anillo al dedo, enserio GRACIAS

No tienes permitido ver los links. Registrarse o Entrar a mi cuentaSe te escapó un (
Código: python
msj = "Estableciendo interfaz de conexión ({0}:{1})")


Se aprende mucho con estos post, se agradece WhiZ  :D
Saludos!

Gracias @Barlan por el aviso. En realidad me lo traje de la llamada al método mostrar_info. Al principio, lo puse así:
Código: python
self._mostrar_info("Estableciendo interfaz de conexión ({0}:{1})".format(self.__ip, self.__puerto))


Como quedaba muy largo, metí el mensaje en una variable y ahí fue cuando me llevé el paréntesis de cierre jeje.

Como dije, muchas gracias por la notificación. En instantes lo modifico.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Genial @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta he estado leyendo mucho sobre este fabuloso modulo y esto me cae como anillo al dedo, enserio GRACIAS

No, al contrario. Gracias a vos por tomarte el tiempo de pasar por aquí ;)

Saludos!
WhiZ


Genial. Me dejó con ganas esta entrada. A la espera de la siguiente.

Gracias por el aporte.