Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Programación con sockets II
2
Esquema de aplicación con TCP Procesado de la petición
server Socket() client bind() listen() socket() accept() Espera Establece conexión connect() Petición read() Espera write() Procesado de la petición Respuesta read() Espera write() Liberación de la conexión close() close()
3
Procesado de la petición
Servidor Iterativo ds=socket() bind(ds) listen(ds) nds=accept() Espera read(nds) Espera Fin de conexión: espera nuevas conexiones Atiende conexión Procesado de la petición write(nds) close(nds)
4
Procesado de la petición
Servidor Concurrente ds=socket() bind(ds) listen(ds) padre nds=accept() Espera hijo fork() close(nds) exit() close(nds) read(nds) Espera Procesado de la petición write(nds) close(ds) Puede haber varios hijos simultáneamente
5
Inicialización del servidor
Crear un socket TCP ds = socket(AF_INET, SOCK_STREAM, 0) Crear un cola de espera de peticiones de conexión int listen(int ds, int nb) ds: descriptor del socket de escucha nb: número máximo de peticiones pendientes (0..5). Aceptar una conexión int accept(int ds, struct sockaddr * p_adr, int * p_lgadr) ds: descriptor del socket p_adr: dirección del socket conectado p_lgadr: puntero al tamaño de la dirección Devuelve el descriptor de un nuevo socket conectado con el cliente.
6
Inicio y fin de conexión.
El cliente establece una conexión int connect(int ds, struct sockaddr *p_adr, int lgadr) ds: descriptor del socket local p_adr: puntero a la dirección del servidor lgadr: longitud de la dirección Cerrar conexión totalmente int close(int ds); Cerrar la conexión de forma controlada int shutdown(int ds, int sens) ds: descriptor del socket sens: control de la desconexión 0: no RX; 1: no TX; : no RX y no TX Cuando el cliente cierra la conexión, read() del servidor devuelve 0
7
Enviar datos int write(int ds, char * msg, int lg)
ds: descriptor del socket msg: mensaje a enviar lg: longitud del mensaje int send (int ds, char *msg, int lg, int opcion) ds: descriptor del socket msg: dirección del mensaje a enviar lg: longitud del mensaje opcion: 0, MSG_OOB, MSG_PEEK Si opción vale 0, equivale a write()
8
Recibir datos int read(int ds, char * msg, int lg)
ds: descriptor del socket msg: dirección donde se guarada el mensaje recibido lg: longitud de la memoria reservada para guardar el mensaje int recv (int ds, char *msg, int lg, int opcion) ds: descriptor del socket msg: dirección del mensaje a enviar lg: longitud del mensaje opcion: 0 , MSG_OOB, MSG_PEEK Si opción vale 0, igual que read
9
Asignación de puertos PUERTOS TCP UDP Reservados 1-1023 1-1023
Asignados por el sistema Asignados por rresvport() --- Libres para el usuario Entre 1 y 1023 sólo se puede obtener con bind() si es root Si ponemos bind(0), el sistema asigna uno del rango ( ) El usuario debe elegir puertos para sus aplicaciones entre ( )
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.