0% encontró este documento útil (0 votos)
13 vistas21 páginas

Introducción a Sockets en Redes

Los sockets son mecanismos de comunicación que permiten a programas en diferentes máquinas intercambiar datos a través de una red. Existen diferentes tipos de sockets, como TCP y UDP, que ofrecen distintas características de conexión y confiabilidad. Además, se presentan librerías de alto nivel en .NET, como TcpListener y TcpClient, que facilitan la implementación de conexiones de red.

Cargado por

Diego Zipitria
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas21 páginas

Introducción a Sockets en Redes

Los sockets son mecanismos de comunicación que permiten a programas en diferentes máquinas intercambiar datos a través de una red. Existen diferentes tipos de sockets, como TCP y UDP, que ofrecen distintas características de conexión y confiabilidad. Además, se presentan librerías de alto nivel en .NET, como TcpListener y TcpClient, que facilitan la implementación de conexiones de red.

Cargado por

Diego Zipitria
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Sockets

Problema
???

Proceso Proceso
Red

¿Cómo se comunican dos procesos que están en máquinas distintas?


Solución
Definición de Socket

Son mecanismos de comunicación entre procesos que permiten


que un programa “hable” con otro programa incluso estando en
distintas máquinas.
Comunicarse = enviar y recibir datos
Es un canal de comunicación punto a punto.
Sockets en Sistemas Operativos

● Funcionan para cualquier protocolo de red, no solo TCP/IP


● Su implementación depende del Sistema Operativo, si bien son
similares difieren en algunos aspectos
● Ej:
○ Windows usa la librería Winsock32
○ Unix usa la librería socket

Clase de .NET Socket Socket

Implementación del SO WinSocket32 socket


Windows Unix-like
Endpoint

1. ¿Cómo identificar una


máquina remota?
Con su dirección IP
2. ¿Cómo identificar un proceso
dentro de la máquina?
Con un puerto

Dirección IP + número de puerto = Endpoint


¿Qué información preciso para comunicarme
usando Sockets?

1. IP remota
2. Puerto remoto
3. IP local
4. Puerto local
5. Protocolo de red (Ejemplo TCP o UDP)
Tipos de Sockets - TCP vs UDP

● Orientados a la conexión
Permite conexión entre 2 procesos. Mensajes confiables.
Se usan stream sockets (protocolo TCP). Útiles para
transmisión de datos.
● No orientada a la conexión
Permite conexión entre múltiples procesos a la vez. Mensajes
no confiables.
Se utiliza datagram sockets (protocolo UDP). Útiles para
transmisión de información multimedia u operaciones de red no
convencionales.
Socket TCP

● Los Sockets TCP operan en una de dos modalidades


Aceptar conexiones.
Transmisión de datos.
● En .NET la clase Socket permite el manejo a bajo nivel de las conexiones sockets.
● Métodos para establecer la conexión
Servidor
- Bind(IPEndPoint local) – enlaza al socket a una dirección y puerto específicos.
- Listen(int c) – establece el socket en modalidad de aceptar conexiones.
- Accept() – deja al socket a la espera de una nueva conexión.
Socket TCP

Cliente
- Bind(IPEndPoint local) – enlaza al socket a una dirección y puerto
específicos. (Opcional para el cliente)
- Connect(IPEndPoint remote) – establece la conexión con el servidor
remoto.
Intercambio de datos
- Send(byte[] buffer) – escribe datos sobre la conexión.
- int Receive(byte[] buffer) – lee datos desde la conexión.
Finalización de una conexión
- Shutdown(SocketShutdow.Both) – Deshabilita el envío y recepción en un
Socket.
- Close() - Cierre de la conexión y liberación de los recursos
IP

● Comando ipconfig en Windows o ifconfig en Mac/Linux para ver mis


interfaces de red
● 127.0.0.1 o localhost: Sirve para conectar procesos que esten en la misma
maquina

● En Mac: Para encontrar su ip filtrando usando grep, ejemplo:


○ ifconfig | grep inet
○ También pueden usar netstat -an para ver la ip que usan las conexiones ya existentes
Puerto

● Comando netstat -an para ver información de las conexiones en mi


máquina, permite ver los puertos en uso
● Los puertos del 1 al 65535 son válidos
● Del 1 al 1024 están reservados para ciertas aplicaciones
○ Ej. 22 para SSH, 80 para http, 443 para https
● Generalmente nuestras aplicaciones usan puertos mayores a 1024
● El puerto 0 especifica usar cualquier número de puerto disponible
Ejecutar varios proyectos a la vez (Visual Studio)

Recordar
correr el Server
y despues el
Cliente
Rider:

https://codeopinion.com/launching-mult
iple-projects-in-jetbrains-rider/
Sockets Ventajas y Desventajas

Ventajas Desventajas
● Tecnología muy eficiente y ● Solo resuelve la capa de
confiable para efectuar transporte de datos
comunicaciones entre procesos ● Tenemos que programar la
● Permite llevar a cabo diversas
codificación y
operaciones de red
decodificación de datos
● Nos da más control sobre el
canal de comunicación
● Dificultad para agregar
● Multiplataforma y multilenguaje nuevas operaciones
Librerías de alto nivel para Sockets
Utilizan
Sockets por
debajo
● TcpListener
● TcpClient
● UdpClient

Fuente: TCP/IP Sockets in C# Practical Guide for Programmers


TCP

● TcpListener
○ Librería de alto nivel que permite administrar las conexiones TCP entrantes.
○ Resuelve los problemas de conectividad de bajo nivel.

● TcpClient
○ Librería de alto nivel que permite establecer una conexión TCP entre dos
IPEndPoint.

● NetworkStream
○ Clase que relaciona un Stream con un socket para facilitar la lectura y escritura
desde una una conexión socket establecida.
Diferencias entre Sockets y TCPClient/TCPListener

• Socket • TcpListener

• .Bind(IPEndPoint local) • TcpListener(IPEndPoint local)


• .Listen(int backlog)
• .Start()
• .Accept() : Socket
• .Stop()

• .AcceptTcpClient() : TcpClient
• .Connect(IpEndPoint remote)
• TcpClient
• .Shutdown()
• .Close() • .Connect(IPEndPoint remote)

• .GetStream() : NetworkStream

• .Send(byte[] buffer, int offset, int size, • .Close()


SocketFlags)
• NetworkStream
• .Receive(byte[] buffer, int offset, int
size, SocketFlags) • .Write(byte[] buffer, int offset, int size)

• .Read(byte[] buffer, int offset, int size)


Métodos asincrónicos

● Varias operaciones en .NET cuentan con su versión “Async”


● Devuelven Task o Task<...> lo cual permite realizar await
● Ej: Accept() : Socket => AcceptAsync() : Task<Socket>
● Aplica para todos los métodos de I/O (Sockets, TcpListener,
TcpClient, escritura/lectura a disco etc. )
UdpClient

● UdpClient
○ Librería de alto nivel que permite efectuar el intercambio de datagramas
entre dos IPEndPoint.

● Métodos
○ UdpClient(IPEndPoint) – crea el cliente enlazando con el extremo local
especificado.
○ Send(byte[], int, IPEndPoint) – efectúa el envío del datagrama al extremo
remoto especificado.
○ Receive(IPEndPoint) : byte[] – queda a la espera de datagramas
provenientes del extremo remoto especificado.
Checkpoint!

● ¿Que hace el socket.Listen(int)?

● ¿Puedo tener un servidor usando Socket y un cliente usando TcpClient?

● ¿En qué caso uso Socket y en qué caso uso TcpClient?

● ¿Que limitaciones tiene usar la ip 127.0.0.1?

● ¿Por qué no enviamos los archivos de la misma manera que mandamos el resto

de datos?

También podría gustarte