Programación C/S Básica



Documentos relacionados
Introducción de Sockets en C.

SOCKET S. Alberto Castro Rojas

Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP. Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011

Introducción a la programación con sockets en C

Sockets: funcionamiento y programación. Sockets tipo UNIX. MSc. Ivan A. Escobar

COMUNICACIÓN ENTRE PROCESOS SOCKETS

Tema 4: Sockets: Un interfaz con TCP/IP

Modem IBM Compatible. IBM Compatible. Ethernet IBM AS/400. Laser printer. Workstation. Mac II. El Interfaz. Socket. versión perliminar

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM)

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

Estructuras y funciones de programación de sockets.

Mecanismos IPC: sockets

Adaptación de aplicaciones a IPv6

Programación con Sockets

Migrando aplicaciones a IPv6

SOCKETS en Linux. Lic. Leonardo de - Matteis. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011

Sockets (UDP) Tema 2.- Nivel de aplicación en Internet

Redes de Computadores Nivel de Aplicación: Programación con sockets I

Programación con sockets

UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA

Tema 4.1: - TRANSPORTE-

Problemas de Redes de Computadores. Conjunto de problemas 1

Práctica 2 Programación de Aplicaciones Distribuidas: Sockets TCP. Laboratorio de Comunicación de Datos ITT Telemática 26 de Septiembre 2011

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX

Tema 4 Sockets: Un interfaz con TCP/IP

Programación de aplicaciones distribuidas usando sockets

Nivel de Transporte en Internet

BOLETIN 8 INDICE. ordenación de bytes. conversión de nombre y direcciones.

ARQUITECTURAS CLIENTE/SERVIDOR

Características de un lenguaje ideal para robótica

Ingeniería Técnica de Telecomunicación, esp. Telemática Universidad de Jaén

Qué es un socket? Dominios de comunicación. Tipos de sockets en el dominio AF_INET. Sockets Stream. Sockets Datagram. Sockets Raw

Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1

Sistemas Operativos Distribuidos

Sistemas Distribuidos. Sockets

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

Arquitecturas cliente/servidor

Clase de Sockets en lenguaje C. Prof. Ricardo González

-> Todo socket viene definido por dos características fundamentales:

Arquitectura de Redes y Servicios de Telecomunicación

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

Arquitecturas cliente/servidor

1. Definición de puerto 2. Sockets 3. Conceptos cliente/servidor 4. Definición de Stream 5. Concurrencia, multiprogramación y multitarea 6.

Examen de Fundamentos de Redes de Computadores Junio 2005

Tema 5 El Modelo Cliente-Servidor

Bibliografía [COM00] Internetworking with TCP/IP, vol. 3, Cap. 2 y del 7 al 15.

Diseño de aplicaciones distribuidas ÍNDICE

Programación de sockets

Comunicación entre Procesos y Sockets

COMUNICACIÓN Sistemas Distribuidos

Estructuras y funciones de programación de sockets.

ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C. Grado en Ingeniería Informática Curso 2014/15

Ejercicio Sockets Suma Resta. Descripción

Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.

TimeOut RTT medido 1 5 seg. 2*5= ,7 3 TimeOut 3 TimeOut 3 0, ,35 5 0,44

Introducción a Sockets en Linux

Análisis Experimental de la Transmisión de Datos

Programación en red sobre TCP/IP Interface sockets

TEMA 5: EL TELNET SERVICIOS DE COMUNICACIONES

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA PROGRAMA DE ESTUDIO

PRÁCTICA 2: Cliente-servidor UDP

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente

Práctica 1: sockets en Python

Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros.

Conceptos básicos de redes TCP/IP

Cliente/Servidor en Java

Juan de Dios Murillo Morera Santiago Caamaño Polini INTRODUCCIÓN

Sistema Cliente Servidor Con Sockets

Lab 01: Programación de Sockets en TCP

Funcionamiento de Servicios Web, FTP

Práctica 1. Uso básico de servicios cliente-servidor

Capítulo 5. Programación de aplicaciones de red

Transcripción:

1 de 16 Programación C/S Básica Enrique Alba Torres Universidad de Málaga (UMA)

2 de 16 Los servicios Internet se ofertan como sistemas Cliente/Servidor Los protocolos de base suelen ser peer-to-peer (igual-a-igual) En cualquier caso se necesita una interfaz para programar BSD socket es una interfaz estándar orientada al paso de mensajes entre procesos para programar en red sobre TCP/IP Las primitivas (funciones en C) y tipos de datos (estructuras,...) de los sockets conforman un API para programar servicios en red Existen sockets para UNIX, Linux, Windows y otros SS.OO. Existen API s para sockets en C, C++, Java y otros lenguajes E J E M P L O #include <sys/socket.h>... main() { int sservice;... struct sockaddr_in sout;... sservice = socket( );... sout.sin_family = AF_INET;... sout.sin_port = 4000;... connect(sservice,sout, );... }

3 de 16 (I) Un servidor realiza un proceso repetitivo, normalmente sin final, que consiste en un bucle básico de atención a los clientes:... while(true) { esperar petición de un cliente; atender al cliente; }... La espera de peticiones puede hacerse: A. Sobre un protocolo o varios (servicio multiprotocolo) B. Para proporcionar un servicio o varios (multiservicio) La atención al cliente puede hacerla: A. Directamente el servidor (iterativo) B. Un servidor esclavo generado (concurrente) Según el nivel de transporte usado el servicio puede ser: A. Orientado a la conexión (si el servidor utiliza TCP) B. Sin conexión (si el servidor utiliza UDP)

4 de 16 Iterativo Concurrente Or. Conexión Sin Conexión Multiprotocolo Multiservicio Ventajas simple de programar atención al cliente indep. del servicio información fluye correcta y ordenada comunicación eficiente y ligera servicio independ. de implementación versatilidad y potencia (II) Inconvenientes la cola de clientes pendientes puede crecer gestión de procesos hijos esclavos (fork+signal) puede ser costoso para algunos servicios posible pérdidas, desorden y + complejo difícil de lograr para algunos servicios difícil de programar y mantener

5 de 16 Tema 6. Esquemas de Implementación C/S usando SERVIDORES ITERATIVOS Servidor SIN CONEXIÓN Socket en un puerto bien-conocido usado para toda la comunicación ORIENTADO A LA CONEXIÓN Servidor Proceso de aplicación del servidor Socket para peticiones de conexión Socket para una conexión individual Sistema operativo.

6 de 16 Esquemas de Implementación C/S usando SERVIDORES CONCURRENTE (CON/SIN CONEXIÓN) Maestro Esclavo1 Socket para peticiones de conexión... Esclavo n.. para conexiones individuales Procesos de aplicación del servidor Sistema Operativo VARIOS PROCESOS MONOPROCESO Servidor... Proceso de aplicación de un servidor Socket para peticiones de conexión para conexiones individuales Sistema Op.

7 de 16 Primitiva Función socket Crea un TSAP del servicio especificado (TCP o UDP, p.e.) bind Registra en el sistema el servicio asociado a un socket listen accept connect Shutdown close sendto write recvfrom read select Crea una cola para almacenar CR que lleguen (pasivo) Saca una CR de la cola del socket o espera a que llegue una Inicia una conexión con un socket remoto (local remoto) Cierran la conexión de un socket (ambos extremos pueden usarlo independientemente) Envían un mensaje por un descriptor de socket dado normalmente de forma no bloqueante Reciben un mensaje por un descriptor de socket dado normalmente de forma bloqueante Informa sobre los sockets listos para escribir o leer de ellos

8 de 16 Familias de Direcciones Cada familia representa un dominio con sockets de similares características La familia determina el formato y los protocolos disponibles Las direcciones determinan el host y la aplicación de manera inequívoca La estructura genérica de una dirección es: struct sockaddr { u_short sa_family; /* Familia: ctes. de la forma AF_xxx */ char sa_data[14]; /* 14 bytes dependientes de la familia */ }; Algunos de los donimios disponibles son: AF_INET: protocolos de Internet AF_UNIX: sockets locales que corresponden a ficheros AF_CCITT: protocolos CCITT como X.25 AF_SNA: protocolos de redes IBM SNA AF_DECnet: protocolos de redes DEC La estructura para Internet-TCP/IP (AF_INET) es como sigue: struct sockaddr_in { short sin_family; /* Valor AF_INET*/ u_short sin_port; /* 16 bits con el número del puerto */ u_long sin_addr; /* 32 bits (red+ host)*/ char sin _zero[8]; /* 8 bytes no usados */ };

9 de 16 Tipos de Cada tipo de socket tiene ciertas propiedades para realizar las transmisiones Los tipos más utilizados son: SOCK_STREAM Orientado a la conexión (TCP si AF_INET) SOCK_DGRAM SOCK_RAW Servicio sin conexión (UDP si AF_INET) Acceso a bajo nivel (IP si AF_INET) sólo puede usarlos el root!

10 de 16 Tema 6. Implementación de un C/S sobre TCP CLIENTE socket (crea socket) SERVIDOR socket (crea socket) connect (con. servidor) write (pide servicio) read (rec. respuesta) close (cierra conex.) bind (qué puerto usa) listen (encolar petic.) accept (espera conex.) read (rec. petición) write (sirve petición) close (cierra conex.)

11 de 16 Implementación del Cliente sobre TCP (I) /*******************************************************\ * (client.c) Client for reading input messages from keybd. <CdD>* \*******************************************************/ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> #define TRUE 1 #define FALSE 0 main() { int sservice, end; char buf[128]; struct protoent *ppe; struct sockaddr_in sout; ppe = getprotobyname("tcp"); ❶ Incluimos el API ❸ Abrimos un TSAP ❷ Pedimos información sobre TCP /*Get the tcp-entity data*/ /*Open the socket*/ sservice=socket(pf_inet,sock_stream,ppe->p_proto);

12 de 16 Implementación del Cliente sobre TCP sout.sin_family = AF_INET; /*ARPANET */ sout.sin_addr.s_addr = getservbyport(4000,"tcp"); /*Which server?*/ sout.sin_port = 4000; /*Output port*/ /*Connect to the server*/ connect(sservice,(struct sockaddr *)&sout, sizeof(sout)); end = FALSE; while(!end) /*Client Service Loop*/ { /*Ask for the service*/ printf("\nclient> Send a message...: "); scanf("%s",buf); write(sservice,buf,strlen(buf)); printf("\nclient>client sent: %s", buf); if (!strcmp(buf,"end")) { printf("\nclient>bye..."); end=true; } } close(sservice); } /*main()*/ fflush(stdout); ❼Cerrar TSAP ❹Dirección del Servidor ❺ Conectar con servidor fflush(stdout); ❻Msj. para servidor fflush(stdout);

13 de 16 Implementación del Servidor sobre TCP /***************************************************************\ * (server.c) The server shows the received messages in the screen. <CdD> * \***************************************************************/ #include <sys/types.h> ❶ Incluimos el API #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> ❸ Abrimos un TSAP #include <string.h> #define TRUE 1 #define FALSE 0 ❷ Pedimos información main() sobre TCP { int sservice, sclient,l,nbytes_read,end; char buf[128]; struct protoent *ppe; struct sockaddr_in sin,clientfsin; ppe = getprotobyname("tcp"); /*Open the socket*/ sservice=socket(pf_inet,sock_stream,ppe->p_proto); /*pse = getservbyname("messages", "tcp"); <---If service is reg.*/

14 de 16 Implementación del Servidor sobre TCP sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; ❺ sin.sin_port = 4000; Registrar, conf., aceptar sclient=bind(sservice, (struct sockaddr*)&sin, sizeof(sin)); /*Register serv*/ listen(sservice,5); /*Up to 5 pending connections*/ sclient=accept(sservice,(struct sockaddr*)&clientfsin,&l); /*Accept a client*/ /*If concurrent, a children server should be spawned here by using fork()*/ end = FALSE; while(!end) /*Give the service*/ { nbytes_read=read(sclient,buf,sizeof(buf)); if (nbytes_read>=0) buf[nbytes_read]='\0'; ❻Leer petición else {strcpy(buf,"\nserver>error IN SERVER!"); end=true; } printf("\nserver>server received: %s", buf); fflush(stdout); if(!strcmp(buf,"end")) end=true; } printf("\nserver>bye..."); fflush(stdout); close(sclient); /*Never forget to close a socket!*/ close(sservice); ❼ Normalmente nunca cerrar sservice! } /*main()*/ ❹Dirección IP+TCP

15 de 16 Implementación de un C/S sobre UDP CLIENTE socket (crea socket) SERVIDOR socket (crea socket) bind/connect (reg/conectar) sendto/write (pide servicio) recvfrom/read (leer respuesta) close (cierra conex.) bind (registrar) recvfrom (lee petición) sendto (envía resp.)

16 de 16 Internetworking with TCP/IP (Vol. 1) Comer, D.E. Prentice-Hall. 1991. Internetworking with TCP/IP (Vol 3) Comer D.E., Stevens, D.L. Prentice-Hall. 1993. Unix Network Programming Stevens, W.R. Prentice-Hall. 1990. Computer Networks and Internets (2 nd edition) Comer, D.G. Prentice-Hall. 1999 A Guide to the TCP/IP Protocol Suite Wilder, F. Artech House. 1993.