PDF de programación - Programación con Sockets - Introducción

Imágen de pdf Programación con Sockets - Introducción

Programación con Sockets - Introduccióngráfica de visualizaciones

Publicado el 25 de Marzo del 2019
1.017 visualizaciones desde el 25 de Marzo del 2019
399,3 KB
31 paginas
Creado hace 19a (08/11/2004)
Redes
Ingeniería Informática

Universidad de Oviedo

Programación con
Sockets

INTRODUCCIÓN

noviembre de 2004

1

Redes
Ingeniería Informática

Universidad de Oviedo

¿Qué son los Sockets ?
• Son un mecanismo de comunicación entre

procesos:
– Dentro de una misma máquina.
– Distribuidos en diferentes máquinas.

• Que pueden ser identificados mediante un nombre.
• Proporcionan un interfaz estándar para el acceso a

diferentes protocolos de comunicaciones.

• Soportan, entre otros, la pila de protocolos TCP/IP.
– Acceso a servicios de transporte orientados a conexión

(TCP)

– Acceso a servicios de transporte orientados a datagrama

(UDP)

– Acceso a servicios de capa de red (IP)

noviembre de 2004

2

Redes
Ingeniería Informática

Tipos de Sockets
• Stream (SOCK_STREAM):

Universidad de Oviedo

– Flujo de datos bidireccional, fiable, ordenado y sin duplicados.
– En la recepción no se conservan marcas relacionadas con la

forma en que fueron enviados.
• Datagrama (SOCK_DGRAM):

– Flujo de datos bidireccional, sin garantías de fiabilidad, orden

o evitación de duplicados.

– Los datos se recibes en los mismos bloques en que fueron

enviados.
• Otros tipos:

– Raw (SOCK_RAW)
– Paquetes Secuenciados (SOCK_SEQPAQUET)

noviembre de 2004

3

Redes
Ingeniería Informática

Universidad de Oviedo

Dominios de Sockets
• Cada socket está asociado a un dominio de

comunicaciones.

• Un dominio es una abstracción introducida para
encapsular propiedades comunes de los sockets
involucrados en la comunicación:
– Esquema usado para nombre el socket.
– Tipos de sockets disponibles dentro del dominio.
– Protocolos de comunicaciones utilizados.
– ...

• La familia que soporta la pila de protocolos TCP/IP es:

PF_INET o AF_INET

noviembre de 2004

4

Redes
Ingeniería Informática

Universidad de Oviedo

Nombres (I)
• La estructura del nombre o dirección de un socket

depende de la familia a la que pertenece.

• La API utiliza una estructura genérica en la declaración

de las funciones.
struct sockaddr {

uint8_t
sa_family_t
char

sa_len;
sa_family;
sa_data[14];

// address family: AF_XXX value
// protocol specific address

};

• Proporciona estructuras particularizadas para cada

familia de sockets soportada.
– struct sockaddr_in
– struct sockaddr_un

noviembre de 2004

5

Redes
Ingeniería Informática

Nombres (II)

longitud

familia

datos (14 bytes)

longitud AF_INET
nº puerto (2 bytes)

Dir IPv4 (4 bytes)

relleno (8 bytes)

Longitud fija:

16 bytes

Longitud fija:

16 bytes

Universidad de Oviedo

longitud AF_LOCAL

pathname

(hasta 104 bytes)

noviembre de 2004

Longitud variable

6

Universidad de Oviedo

Redes
Ingeniería Informática

Rellenando la una dirección:
Ejemplo I:

sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
sock_addr.sin_port = htons(0);
sock_addr.sin_family = AF_INET;

Ejemplo II:

sock_addr.sin_addr.s_addr = inet_addr(“128.59.69.7”);
sock_addr.sin_port = htons(5115);
sock_addr.sin_family = AF_INET

noviembre de 2004

7

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

8

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

9

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

10

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

11

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

12

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

13

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

14

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

15

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

16

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

17

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

18

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

19

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

20

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

21

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

22

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

23

Redes
Ingeniería Informática

Universidad de Oviedo

noviembre de 2004

24

Redes
Ingeniería Informática

Programación con Windows Sockets (I)
• Tipo de dato del socket: SOCKET

– La validez de un socket se comprueba comparando con

Universidad de Oviedo

INVALID_SOCKET
Estilo BSD:

Estilo recomendado:

/* or s < 0 */

s = socket(...);
if (s == -1)
{...}
s = socket(...);
if (s == INVALID_SOCKET)
{...}

noviembre de 2004

25

Redes
Ingeniería Informática

Universidad de Oviedo

Programación con Windows Sockets (II)
• Función Select() y FD_*

– La sintaxis y funcionalidad se mantiene, aunque:

• Sólo es aplicable a sockets.
• El número máximo de descriptores a comprobar no se

emplea

– Los conjuntos de sockets se representan con el tipo fd_set,

aunque se implementan como un array de sockets.

– Para evitar problemas de compatibilidad se recomienda

emplear las macros FD_XXX para:

• Activar
• Inicializar
• Borrar
• Comprobar

dichos conjuntos.

noviembre de 2004

26

Redes
Ingeniería Informática

Programación con Windows Sockets (III)
• Códigos de Error

Universidad de Oviedo

– La causa de un error no está disponible a través de la

variable errno.

– Para acceder a los códigos de error debe usarse la función

WSAGetLastError().

– Para mantener compatibilidad a nivel de código con BSD,

se puede hacer la siguiente definición:

#define errno WSAGetLastError()

En Windows:
En UNIX:
int WSAGetLastError() {return errno}

noviembre de 2004

27

Redes
Ingeniería Informática

Programación con Windows Sockets (IV)
• Códigos de Error (cont.)

Universidad de Oviedo

Estilo BSD:
r = recv(...);
if (r == -1 && errno == EWOULDBLOCK)
{...}
Estilo recomendado:
r = recv(...);
if (r == -1 && WSAGetLastError()== EWOULDBLOCK)
{...}

noviembre de 2004

28

Redes
Ingeniería Informática

Programación con Windows Sockets (V)
• Cambio de nombre en funciones:

Universidad de Oviedo

– En dos casos ha sido necesario cambiar el nombre de las

funciones usadas por la librería Berkeley Sockets:

• close() ⇔ closesocket()
• ioct() ⇔ ioctlsocket() / WSAIoctl()

• Número máximo de sockets soportados

– El número máximo de sockets que puede usar una

determinada aplicación depende de la implementación de
Winsock empleada y se conoce a través de WSAStartUp()

– Además existe la constante FD_SETSIZE que fija el

tamaño máximo de las estructuras fd_set. Por defecto es
64.

noviembre de 2004

29

Redes
Ingeniería Informática

Programación con Windows Sockets (VI)
• Fichero de inclusión:

Universidad de Oviedo

– Winsock2.h

• Comprobación del fallo de una función:

Estilo BSD:
r = recv(...);
if (r == -1 && errno == EWOULDBLOCK)
{...}
Estilo recomendado:
r = recv(...);
if (r == SOCKET_ERROR && WSAGetLastError()==
EWOULDBLOCK)
{...}

noviembre de 2004

30

Redes
Ingeniería Informática

Programación con Windows Sockets (VII)
• Orden de los bytes:

Universidad de Oviedo

– El orden de los bytes en la arquitectura Intel es diferente

del empleado por la red.



– Cualquier referencia a direcciones IP o números de puerto
pasadas desde o hacia una función WinSock debe estar en
orden de red.

Inicialización y terminación de los programas:
– Es necesario usar la función WSAStartup() antes de hacer
ninguna llamada a las funciones de sockets para inicializar
la DLL compartida (winsock.dll)

– Es necesario ejecutar la función WSACleanup() al finalizar

para liberar los recursos ocupados en la DLL

noviembre de 2004

31
  • Links de descarga
http://lwp-l.com/pdf15574

Comentarios de: Programación con Sockets - Introducción (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad