La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Sockets.

Presentaciones similares


Presentación del tema: "Sockets."— Transcripción de la presentación:

1 Sockets

2 Definición de Socket Punto de comunicación entre procesos.
Descriptor de socket.

3 Características de un socket
<sys/socket.h> Dominio Tipo

4 Dominio de un socket Formato de direcciones y protocolos
Dominio UNIX (AF_UNIX) : <sys/un.h> struct sockaddr_un{ short sun_family; char sun_data[108]; };

5 Dominio de un socket Dominio Internet (AF_INET) : struct in_addr{
u_long s_addr; }; struct sockaddr_in{ short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8];

6 Dominio de un socket Valores de la estructura: AF_INET
IPPORT_TCP, IPPORT_TELNET; IPPORT_RESERVED. INADDR_ANY

7 Tipo de un socket Propiedades de comunicación
Fiabilidad de la transmisión. Conservación del orden de los datos. No duplicación de datos. Comunicación en modo conectado. Conservación de los límites de los mensajes. Envío de mensajes <<urgentes>>.

8 Tipo de un socket Tipos disponibles SOCK_DGRAM. Propiedad 5. UDP.
SOCK_STREAM. Propiedades 1-4. Propiedad 6. TCP. SOCK_RAW. Superusuario. IP.

9 Creación y Supresión de un Socket
int socket (dominio, tipo, protocolo) int dominio; int tipo; int protocolo; Supresión: close

10 Enlazamiento socket-dirección
Primitiva bind: int bind (sock, p_direccion, lg) int sock; struct sockaddr *p_direccion; int lg;

11 Enlazamiento socket-dirección
El dominio Unix: ls, rm sockunix.c (hoja 5 de Sockets) El dominio Internet: gethostname, gethostbyname, INADDR_ANY getservbyname, IPPORT_RESERVED

12 Enlazamiento socket-dirección
int getsockname (sock, p_adr, p_lg) int sock; struct sockaddr *p_adr; int *p_lg; crearsock.c (hoja 7 de Sockets)

13 Comunicación por datagramas
Sockets tipo SOCK_DGRAM Poca fiabilidad Comunicación modo no conectado Posible <<pseudoconexión>> (dirección implícita)

14 Envío de mensajes int sendto (sock, msg, lg, opcion, p_dest, lgdest)
int sock; char *msg; int lg; int opcion; struct sockaddr *p_dest; int lgdest;

15 Envío de mensajes int sendmsg (sock, msg, opcion) int sock;
struct msghdr msg[]; int opcion;

16 Envío de mensajes struct msghdr { caddr_t msg_name; int msg_namelen;
struct iovec *msg_iov; int msg_iovlen; caddr_t msg_accrights; int msg_accrightslen; }; 

17 Envío de mensajes struct iovec { caddr_t iov_base; int iov_len; };
msghdr en <sys/socket.h> iovec en <sys/uio.h>

18 Recepción de mensajes int recvfrom (sock, msg, lg, opcion, p_exp, p_lgexp) int sock; char *msg; int lg; int opcion; struct sockaddr *p_exp; int *p_lgex;

19 Recepción de mensajes int recvmsg (sock, msg, opcion) int sock;
int sock; struct msghdr msg[]; int opcion;

20 Cliente/Servidor El Servidor:
Creación y enlace al puerto de servicio de un socket. Desconexión del servidor de su terminal de lanzamiento o ejecución. Bucle infinito en el cual el servidor: Espera una petición. La trata. Pone la forma de respuesta. Envía la respuesta.

21 Cliente/Servidor El Cliente: Creación del socket local.
Preparación de la dirección del servidor. Envío del mensaje. Espera del resultado. Explotación del resultado.

22 Ejemplo Cliente/Servidor
Ejemplo Completo (hoja 11 de Sockets). Estructura hostent en netdb.h   struct hostent{ char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; #define h_addr h_addr_list[0] };

23 Pseudoconexiones Primitiva connect: int connect (sock, p_adr, lgadr)
int sock; struct sockaddr *p_adr; int lgadr;

24 Pseudoconexiones Primitiva socketpair:
int socketpair (dominio, tipo, protocolo, p_sock) int dominio; int tipo; int protocolo; int *p_sock;

25 Pseudoconexiones Primitiva send: int send (sock, msg, lg, opcion)
int sock; char *msg; int lg; int opcion;

26 Pseudoconexiones Primitiva recv: int recv (sock, msg, lg, opcion)
int sock; char *msg; int lg; int opcion;

27 Comunicación modo conectado
Fiabilidad Circuito virtual telnet, ftp, rlogin

28 socket/bind listen accept fork
Creación y enlace del socket de escucha socket/bind Apertura del servicio listen Espera de demanda de conexión accept Servidor en modo conectado Creación de un subproceso fork PADRE HIJO Tratamiento de la demanda

29 Punto de vista del servidor
int listen (sock, nb) int sock; int nb; int accept (sock, p_adr, p_lgadr) int sock; struct sockaddr *p_adr; int *p_lgadr;

30 Creación (y eventualmente enlace de un socket) socket/bind
Construcción de la dirección del servidor Demanda de conexión connect Cliente en modo conectado Fallo Éxito Diálogo con el servidor

31 Punto de vista del cliente
int connect (sock, p_adr, lgadr) int sock; struct sockaddr *p_adr; int lgadr;

32 Diálogo servidor/cliente
La emisión:     int write (sock, msg, lg) int sock; char *msg; int lg;  

33 Diálogo servidor/cliente
La emisión: int send (sock, msg, lg, opcion) int sock; char *msg; int lg; int opcion;

34 Diálogo servidor/cliente
La recepción: int read (sock, msg, lg) int sock; char *msg; int lg;  

35 Diálogo servidor/cliente
La recepción: int recv (sock, msg, lg, opcion) int sock; char *msg; int lg; int opcion;

36 Diálogo servidor/cliente
El corte de la conexión: int shutdown (desc, sens) int desc; int sens;


Descargar ppt "Sockets."

Presentaciones similares


Anuncios Google