Conexi贸n TCP3/12

Lectura

Tal vez has escuchado acerca de los protocolos TCP/HTTP, Hypertext Transfer Protocol (HTTP) y el Transmission Control Protocol (TCP). Ambos son protocolos de solicitud-respuesta, lo que significa que un cliente inicia solicitudes y un servidor escucha las solicitudes y proporciona una respuesta.

Te invito a que te des una vuelta por el curso de Fundamentos de Ingenier铆a de Software, donde hablan m谩s a detalle acerca de estos protocolos.

TCP es un protocolo de bajo nivel, que se encarga de hacer la conexi贸n que describe los detalles de comunicaci贸n entre un servidor y otro. HTTP trabaja dentro de TCP y es el principal encargado de las solicitudes y las respuestas.

Como TCP es el encargado de manejar la conexi贸n entre servidores, es lo primero que debemos comenzar a configurar. Dentro de la librer铆a est谩ndar que se encuentra en Rust, existe std::net, este m贸dulo proporciona funcionalidad de red para los protocolos de control de transmisi贸n y datagramas de usuario, as铆 como los tipos de direcciones IP y de socket. En el m贸dulo contamos con los m茅todos TcpStream y TcpListener los cuales explicar茅 en esta clase.

Pero primero, comenzaremos a crear nuestro primer proyecto usando cargo:

cargo new "NombreProyecto"

Y se ver谩 as铆 en su terminal:
Screen Shot 2021-01-05 at 2.52.15 PM.png

Ya que contamos con nuestro proyecto, pueden ver que tenemos nuestros archivos b谩sicos de un proyecto en Rust:
Screen Shot 2021-01-05 at 2.53.00 PM.png

En nuestra primera l铆nea, debemos comenzar llamando al m贸dulo que vamos a usar, en este caso solo necesitaremos de std::net que es a librer铆a est谩ndar de Rust y mandamos llamar a dos m茅todos que son TcpStream y TcpListener. Entonces nuestra primera l铆nea de c贸digo debe verse as铆:

use std::net::{TcpListener, TcpStream};

Comenzamos haciendo nuestra funci贸n principal, uno de los errores m谩s comunes es que comenzamos a declaras variables y a hacer conexiones y no nos damos cuenta que no est谩n dentro de una funci贸n, esto puede ocasionar problemas de compilaci贸n, recordemos que Rust es un lenguaje multiparadigma entre lenguaje funcional y orientado a objetos, para este caso usaremos la funci贸n principal fn main(). Ahora, dentro de la funci贸n escribimos la siguiente l铆nea de c贸digo:

let listener = TcpListener::bind("127.0.0.1:7373").unwrap();

En este caso, estamos dando valor a una variable donde por medio de la struct de TcpListener (una estructura que representa un socket server) le decimos que escuche desde Tcp conexi贸n 127.0.0.1:7373, para esto la funci贸n bind nos ayuda a decirle que esta es una nueva instancia. A diferencia de otros lenguajes, no podemos usar un puerto como 80, ya que requerimos credenciales de administrador, es por eso que nuestros puerto deben ser mayor a 1024, como este curso es para fines de aprendizaje y es un servidor de una sola tarea, lo dejaremos as铆 por el momento. Al final tenemos unwrap con el cual lo 煤nico que nos indica es que termine la conexi贸n si llegara haber errores.

Ahora trabajar谩s con TcpStream que es una estructura que representa una secuencia Tcp entre un socket local y un socket remoto, en pocas palabras v茅 si hay una conexi贸n entre cliente y servidor.

for stream in listener.incoming() {
    	match stream {
        	Ok(stream) => {
            	println!("隆Nuevo cliente!");
        	}
            	Err(e) => {
                	println!("Conexi贸n fallida")
            	}
    	}
	}

Analicemos el c贸digo de arriba, stream es una versi贸n as铆ncrona de un iterador, un stream representa una conexi贸n abierta entre cliente y servidor. Despu茅s tenemos 矛ncoming que es un iterador de TcpListener nos devuelve un mismo iterador que nos da una secuencia de secuencias.

Corramos nuestro c贸digo, para esto podemos usar:

cargo run

Esperamos en lo que termina, escribe la direcci贸n que asignaste para la conexi贸n dentro de TcpListener en mi caso es 鈥127.0.0.1:7373鈥, dentro de tu navegador. Por el momento nos mostrar谩 un mensaje de conexi贸n fallida, ya que no tenemos informaci贸n para mostrar. Pero no te preocupes, en tu terminal podr谩s ver el mensaje 鈥溌uevo cliente!鈥 cada que intentas acceder.

Si ves que te env铆a varios mensajes simult谩neos, no te preocupes pues es normal que a veces haga solicitudes a diferentes recursos dentro de la p谩gina, y esa sea la raz贸n por la cual muestre los mensajes.

Ya que tienes un servidor sencillo activo, cu茅ntame en los comentarios, c贸mo te funciono todo, qu茅 mensaje env铆as para saber que ya tienes una conexi贸n cliente-servidor.

Aportes 19

Preguntas 0

Ordenar por: