Redes de Computadores: Relación de problemas 1. Sockets

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Redes de Computadores: Relación de problemas 1. Sockets"

Transcripción

1 Redes de Computadores: Relación de problemas 1. Sockets 1. Obtención de nombres y direcciones IP Uso de gethostbyname y gethostbyaddr. Bajo el sistema operativo Linux, esta información se puede obtener mediante el comando /usr/bin/nslookup al que se le puede pasar una dirección IP para obtener el nombre de una máquina o el nombre de una máquina para obtener todas las direcciones IP que tiene asignadas y sus alias. Una dirección IP es un entero de 32 bits (4 octetos) en formato big-endian (primero el octeto de más peso. Igual ocurre con los puertos TCP o UDP que son enteros de 16 bits. Unix dispone de cuatro funciones para traducir entre el formato empleado por TCP/IP y el empleado por nuestro computador. Todas tienen el formato XtoYT donde X e Y pueden ser h (host) o n(network), pero no iguales y T puede ser l (entero largo) o s(entero corto). Para más información ver las páginas man de estos comandos. Para manipular directamente direcciones IP, veanse las páginas man de los comandos inet addr, inet network, inet makeaddr, inet lnaof, inet netof e inet ntoa. Por ejemplo, inet addr traduce una string con la dirección IP de una máquina en formato a.b.c.d a un entero de 32 bits. El programa dirmem.c obtiene una estructura (struct hostent) (ver página man de gethostbyaddr) de una máquina a partir de su dirección IP en notación de punto y extrae de ella el nombre (o nombres) para mostrarlos en pantalla. /*dirnom.c: Obtenci on de informaci on a partir de una direcciona IP*/ #include <arpa/inet.h> #include <netdb.h> int main(int argc, const char *argv[]) u_long addr; struct hostent *hp; char **p; if (argc!= 2) printf("uso: %s direccion-ip\n",argv[0]); /*Cambia de formato a.b.c.d a formato binario*/ if ((addr=inet_addr(argv[1])) == -1 ) printf("la direccion IP tiene que estar en notacion a.b.c.d\n"); exit(2); /*Obtiene una estructura con informacion del host dado en binario.*/ hp=gethostbyaddr( (char *)&addr, sizeof(addr),af_inet); if (hp==null) printf("no encuentro la informacion sobre la maquina %s\n", argv[1]); exit(3); /*Para cada uno de las posibles entradas en h_addr_list*/ for (p=hp->h_addr_list; *p!= 0; p++) struct in_addr in; /*Pasa el binario de la tabla a in.s_addr porque esa estructura la */ /*necesita inet_ntoa, para pasarla a formato a.b.c.d. */ memcpy(&in.s_addr, *p, sizeof(in.s_addr)); printf("%s\t%s \n", inet_ntoa(in),hp->h_name); 1

2 Todos los programas mostrados en estas prácticas se encuentran en leo/ftp/redes/sockets y por lo tanto no hay que escribirlos ni dejarse la vista en el código anterior. Compilar el programa con gcc dirnom -o dirnom y ejecutarlo, por ejemplo: dirnom El resultado será: newton-if-c.mirror.ac.uk Practica 1: Resolución de nombres Crear un programa, nomdir.c que tomando como argumento de entrada el nombre de la máquina, escriba por pantalla las direccion(es) IP que tiene asignada(s) y sus alias, si los tiene. Probar el programa con el nombre unix.hensa.ac.uk 2. Datagramas en el dominio UNIX Los sockets se comunican usando una infraestructura de comunicaciones preexistente. Un Dominio de comunicación es una familia de protocolos. En un sistema UNIX los dominios más habituales son: PF UNIX: para comunicación entre procesos de una misma máquina. PF INET: para comunicación entre procesos en dos computadores conectados mediante los protocolos TCP- UDP /IP. PF=Protocol Family. En cada dominio hay una forma de especificar las direcciones, por lo tanto existen dos familias de direcciones: AF UNIX: Una dirección de socket es como nombre de fichero. AF INET: Una dirección de socket precisa 3 campos: Una dirección IP. Un protocolo (TCP o UDP). Un puerto correspondiente a ese protocolo. AF= Address Family. En el fichero /etc/services se puede encontrar en cada línea información de nombre estándar puerto/protocolo nombre alternativo1 nombre alternativo2... Desde un programa se puede ver en que puerto está un determinado servicio y el servicio asociado a un puerto, con las funciones getservbyname y getservbyport. Por lo tanto existen una serie de puertos reservados. Los puertos a partir de IPPORT RESERVED (usualmente 1024) pueden ser usados por los usuarios para definir otros servicios. Al crear un socket hay que indicar el estilo de comunicación que usará. Para que dos sockets se comuniquen deben haberse creado con el mismo estilo: SOCK STREAM: Orientado a conexión. Intercambio de datos fiable y orientado a octetos. SOCK DGRAM: No orientado a conexión. Los programas que se muestran a continuación, recunixd.c y emiunixd.c, se comunican mediante sockets con datagramas en el dominio UNIX. La dirección del socket del receptor es el fichero sockdir. En PF UNIX la dirección del socket se gestiona con la estructura sockaddr un definida en /usr/include/sys/un.h. Sus campos son: short sun family = AF UNIX char sun path[108] = pathname correspondiente a la dirección del socket. El programa recunixd: 2

3 Crea un un socket en el dominio PF UNIX, estilo SOCK DGRAM. Le asigna la dirección socketdir. Se bloquea a la espera de recepción de un mensaje. Cierra el socket después de recibir el mensaje. Borra la entrada socketdir del directorio. /*Ejemplo de receptor usando sockets con datagramas en el dominio UNIX*/ #include <sys/un.h> #define NAME "socketdir" int main() int sock, length, lon2; struct sockaddr_un name; char buf[1024]; /*Nos creamos un socket en el dominio PF_UNIX y del tipo datagrama*/ /*0 indica el protocolo de comunicaciones 0->protocolo por omision*/ sock=socket(pf_unix, SOCK_DGRAM,0); perror("abriendo socket de datagramas"); /*Formato de la direccion*/ name.sun_family=af_unix; /*Direcci on del socket*/ strcpy(name.sun_path,name); /*Bind asocia un socket con su direcci on*/ if (bind(sock, (struct sockaddr *) &name, sizeof(name))<0) perror("asociando nombre al socket"); printf("direccion del socket --> %s\n",name); /*sock = el socket a traves del cual se lee*/ /*buf = Lugar donde hay que dejar la informacion leida*/ /*1024 = cuantos octetos se quieren recibir.*/ /*0 = modo en el que se quiere recibir, 0->recepcion normal*/ /*NULL = Almacenar la direccion del socket emisor. NULL-> no interesados*/ /*lon2 = Espacio necesario para almacenar la direccion del socket emisor*/ if (recvfrom(sock,buf,1024,0,null,&lon2) <0) perror("recibiendo un datagrama"); printf("-->%s\n",buf); /*Ejemplo de emisor usando sockets con datagramas en el dominio UNIX*/ #include <sys/un.h> #define DATA "Este es el mensaje..." int main(int argc, char *argv[]) int sock; struct sockaddr_un name; char buf[1024]; /*Nos creamos un socket en el dominio PF_UNIX y del tipo datagrama*/ /*0 indica el protocolo de comunicaciones 0->protocolo por omision*/ sock=socket(pf_unix, SOCK_DGRAM,0); perror("abriendo socket de datagramas"); /*Formato de la direccion*/ name.sun_family=af_unix; /*Direcci on del socket*/ strcpy(name.sun_path,argv[1]); /*sock = el socket a traves del cual se escribe*/ /*DATA = mensaje a enviar.*/ /*strlen(data)+1 = tamano del mansaje a enviar*/ /*0 = modo de comunicacion, 0-> normal*/ /*name = estructura que contiene la direccion del distino del datagrama*/ /*sizeof(name) = longitud en octetos de name.*/ if (sendto(sock,data,strlen(data)+1,0, (struct sockaddr *)&name, sizeof(name)) <0) perror("enviando un datagrama"); close(sock); close(sock); unlink(name); El programa emiunixd: Crea un un socket en el dominio PF UNIX, estilo SOCK DGRAM. Calcula la dirección del receptor (a partir del primer argumento de la línea de comandos). Envía un datagrama a esa dirección. Cierra el socket. Ejecución Compilar los fuentes: gcc recunixd.c -o recunixd gcc emiunixd.c -o emiunixd Lanzar en background recunixd (recunixd &). Deberá escribir en pantalla la dirección del socket creado. Lanzar el emisor, facilitándole la dirección del socket del receptor. 3. Datagramas en el dominio internet Vamos a realizar la aplicación equivalente a la anterior, pero en el dominio de internet. El cambio fundamental radica en la gestión de las direcciones de los sockets. En AF INET se usa la estructura struct scokaddr in definida en /usr/include/netinet/in.h. Los campos son: 3

4 short sin family = AF INET unsigned short sin port = Número de puerto. struct in addr sin addr = dirección IP en orden de red. char sin zero[8] = Campo de relleno. El campo más complicado puede ser sin addr, pero puede usarse una operación de copia desde alguna estructura devuelta por funciones de manipulación de direcciones IP ( normalmente gethostbyname()). recuérdese que el puerto y la dirección IP están en orden de red y si se quieren visualizar hay que cambiarlos a orden de máquina. /*Ejemplo de sockets orientados a datagramas en internet. Receptor*/ int main() int sock, length, lon2; struct sockaddr_in name; char buf[1024]; sock=socket(pf_inet,sock_dgram,0); perror("abriendo socket de datagramas"); /*Formato de la direccion*/ name.sin_family=af_inet; /*Direccion IP, INADDR_ANY -> que cuando se use bind para asociar una*/ /*direccion a un socket, la direccion IP es la de la maquina donde esta*/ /*ejecutandose el programa.*/ name.sin_addr.s_addr=htonl(inaddr_any); /*0-> cuando se utilice bind(), el puerto que se va a asociar al socket es */ /*uno libre asignado por el SO.*/ name.sin_port=htons(0); if (bind(sock,(struct sockaddr *)&name, sizeof(name))<0) perror("asociando nombre al socket"); /*Hasta despues del bind no sabremos la direccion del socket asignada.*/ /*=> usar getsockname()*/ length=sizeof(name); /*sock = socket del que queremos saber la direccion*/ /*name = estructura en la que se va a dejar la direccion*/ /*length = tamano ocupado por la estructura.*/ if (getsockname(sock,(struct sockaddr *)&name,&length)<0) perror("averiguando el nombre del socket"); /*Ejemplo de sockets orientados a datagramas en internet. Receptor*/ #include<netdb.h> #define DATA "Este es el mensaje..." int main(int argc, char *argv[]) int sock; struct sockaddr_in name; struct hostent *hp; sock=socket(pf_inet,sock_dgram,0); perror("abriendo socket de datagramas"); /*devuelve una estructura hostent para el host especificado en argv[1]*/ /*para obtener la direccion IP a partir del nombre de la maquina*/ hp=gethostbyname(argv[1]); if (hp == 0) fprintf(stderr,"%s: host desconocido",argv[1]); exit(2); /*Copiamos en la estructura name la direccion del ordenador al que */ /*vamos a conectarnos.*/ memcpy((char *)&name.sin_addr, (char *)hp->h_addr, hp->h_length); name.sin_family = AF_INET; name.sin_port = htons(atoi(argv[2])); if (sendto(sock,data,strlen(data)+1,0,(struct sockaddr *)&name,sizeof(name))<0) perror("enviando un datagrama"); close(sock); /*Imprimimos el puerto para que el emisor mande a ese puerto.*/ printf("puerto del socket -->%d\n", ntohs(name.sin_port)); if (recvfrom(sock,buf,1024,0,(struct sockaddr *)NULL,&lon2)<0) perror("recibiendo el datagrama"); printf("-->%s\n",buf); close(sock); Obsérvese en el receptor como se manipula la estructura name. Se usa INADDR ANY, para que la dirección IP que se asocie al socket con bind() sea la máquina actual. El campo name.sin port=htons(0) se usa para que sea el SO el que asigne un puerto libre al socket. Después del bind() se usa getsockname para saber toda la dirección del socket, entre la que se encuentra el puerto que nos ha correspondido. Ahora no es necesario usar unlink ya que en el dominio de internet una dirección de socket no deja rastro. El programa de ejemplo emisor consigue la dirección del socket del receptor a partir de los argumentos facilitados en la línea de comandos (nombre de la máquina y el puerto de espera del receptor) y rellena la estructura name con esos datos en el formato correcto. El emisor no se molesta en asignar una dirección a su socket ya que el SO asigna al socket la IP de la máquina local y un puerto libre si se quiere realizar una conexión y no se ha invocado a bind(). Si se quiere saber que ha ocurrido se puede usar getsockname() después de sendto() para obtener la dirección del socket. También se podría haber usado un número de puerto fijo para realizar la comunicación, tal como se verá cuando se realice una comunicación con conexión. 4

5 Ejecución Compilar los programas: gcc recinetd.c -o recinetd gcc eminetd.c -o eminetd Lanzar en background recinetd (recinetd &). Deberá escribir en pantalla la dirección del puerto del socket creado. Lanzar el emisor, facilitándole la dirección de la máquina a la que quiere conectarse (localhost si no estamos conectados a internet) y la dirección del puerto del receptor. Práctica 2: Comunicación bidireccional con UDP Modificar los programas anteriores para que realicen un intercambio de datagramas en cada sentido: primero eminetd envía un datagrama a recinetd, tal como está en el ejemplo y luego recinetd envía otro de respuesta a eminetd. Práctica 3: Identificación de emisores UDP Ampliar el programa de ejemplo de recepción de datagramas UDP, para que recinetd no solo escriba por pantalla el contenido del datagrama recibido, sino también la dirección IP (en notación punto) y el número de puerto del emisor. 4. Conexiones en el dominio de Internet Todo lo aplicable en el dominio INET será aplicable en el dominio UNIX, menos el formato de las direcciones socket, por lo que solo mostraremos el caso INET. El el siguiente ejemplo, el programa Clinetc.c: Crea un un socket en el dominio PF UNIX, estilo SOCK STREAM. Calcula la dirección del receptor, a partir del primer argumento de la línea de comandos y un puerto conocido a priori. Se conecta, de forma activa, con el servidor Envía un mensaje. Cierra el socket y por lo tanto la conexión. El puerto del cliente no aparece explícitamente en ninguna parte, pero es necesario, ya que una conexión TCP precisa de dos puertos. Al igual que en el caso UDP, el SO asigna dinámicamente un puerto si se intenta establecer una conexión y no ha habido un bind() previo. La conexión se establece mediante el comando connect (ver página man). La escritura por la conexión se hace mediante la llamada genérica para escribir por cualquier objeto de E/S: write(). Una alternativa a write es send(), específicamente diseñada para sockets con conexión (ver página man). El programa Serinetc.c: Crea un un socket en el dominio PF UNIX, estilo SOCK STREAM. Calcula una dirección y se la asocia a sock. Marca el sock como socket de escucha. Se bloquea en el sock, a la espera de una petición de establecimiento de conexión por parte de algún cliente. Consigue una conexión a través de un socket nuevo, msgsock, que es un socket de dialogo. Recibe información a través del msgsock. Cierra msgsock (y con él la conexión). Se dispone a aceptar nuevas conexiones a través de sock. 5

6 /*Clinetc.c: Cliente TCP basado en sockets*/ #include <netdb.h> #include <stdlib.h> #define SERV_ADDR (IPPORT_RESERVED+1) #define DATA "##--##--##----***----##--##--##" int main (int argc, char *argv[]) int sock; struct sockaddr_in server; struct hostent *hp; if (argc<2) printf("uso: %s nombre_host\n",argv[0]); /*Creamos un socket orientado a conexi on*/ sock=socket(pf_inet,sock_stream,0); perror("no se ha opdido conseguir el socket"); /*Nos conectamos con el socket de escucha del servidor.*/ /*Lo conseguimos calculando primero su direcci on, a partir del nombre*/ server.sin_family =AF_INET; hp=gethostbyname(argv[1]); if (hp==0) fprintf(stderr, "%s: No conozco ese computador\n",argv[1]); exit(2); memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length); server.sin_port = htons (SERV_ADDR); if (connect(sock, (struct sockaddr *)&server, sizeof(server))<0) perror("conexion no aceptada!!!"); if (write(sock,data, strlen(data)+1)<0) perror("no he podido escribir el mensaje"); close(sock); /*Serinetc.c: Servidor iterativo TCP basado en sockets*/ #include <netdb.h> #include <stdlib.h> #define STDOUT 1 #define SERV_ADDR (IPPORT_RESERVED+1) int main() int rval; int sock,length,msgsock; struct sockaddr_in server; char buf[1024]; /*Creaci on de un socket de escucha, de tipo "stream"*/ sock=socket(pf_inet, SOCK_STREAM,0); perror("no hay socket de escucha"); /*Voy a asignar ese socket a la direcci on de transporte*/ server.sin_family=af_inet; server.sin_addr.s_addr=htonl(inaddr_any); server.sin_port = htons(serv_addr); /*El puerto es uno concreto y fijo*/ if (bind(sock,(struct sockaddr *)&server, sizeof(server))<0) perror("direccion no asignada"); /*Me dispongo a escuchar en el socket.*/ listen(sock,1); while (1) /*Me bloqueo esperando peticion de conexion*/ /*Acepto y consigo un socket de dialogo "msgsock"*/ msgsock = accept(sock, (struct sockaddr *)0, (int *) 0); if (msgsock==-1) perror("conexion no aceptada"); else do /*Me dispongo a leer datos de la conexion*/ memset(buf,0,sizeof(buf)); rval=read(msgsock,buf,1024); if (rval<0) perror("mensaje no leido"); else write(stdout,buf,rval); while (rval>0); printf("\ncerrando la conexi on...\n"); close(msgsock); El servidor gestiona dos sockets (sock y msgsock). En uno usa listen() y en el otro accept(). Para poder aceptar conexiones TCP de forma pasiva, el programa debe marcar un socket como de escucha, mediante el comando listen(), que tiene como argumento, además del socket, el tamaño de la cola de peticiones de conexión pendientes. En nuestro caso de tamaño 1, lo que implica que mientras se sirve una petición, solo puede haber una más esperando. Si hay una esperando y llega otra adicional, su petición fracasará. La llamada accept extrae la primera conexión pedida en la cola de conexiones pendientes, crea un nuevo socket de dialogo con las mismas propiedades del usado en listen(). Si no hay peticiones pendientes, accept() bloquea el servidor hasta que haya una. Si se quiere, con accept() se puede obtener información de la dirección del otro extremo. Esto se puede obtener en cualquier otro momento con la función getpeername() (ver página man). La lectura por el socket de dialogo se hace con la función genérica de UNIX: read(). Una alternativa a read es recv(), específicamente diseñada para sockets con conexión (ver página man) que es simétrica a send(). Se ha hablado de close() sobre un socket para cerrar la conexión, pero lo que hace es eliminar el descriptor del socket y por lo tanto la conexión. Para realizar sólo el cierre de la conexión, sin eliminar el socket, está el comando shutdown() (ver página man). Ejecución Generar los ejecutables. Lanzar el servidor en background (Serinetc &). Podemos comprobar con el comando ps que el servido está funcionando. Ahora se puede ejecutar el cliente, indicándole la máquina en la que se encuentra el servidor (Ej: Clinetc localhost). Una vez conectados el cliente termina pero el servidor no (comprobarlo con ps). Se pueden realizar varias ejecuciones de Clinetc seguidas. El servidor habrá que matarlo explícitamente con el comando kill (Ej: kill -9 <pid del Serinetc>). 6

7 Práctica 4: Identificación de clientes TCP A partir de los programas anteriores, modificar el servidor (Serinetc.c) para que durante su ejecución imprima por pantalla los siguientes datos de los clientes que a él se conectan: (1)número de puerto, (2) dirección IP en notación de punto y (3)nombre de la máquina correspondiente a esa dirección IP. 5. Conexiones simultáneas Es interesante poder dar servicio a varios clientes a la vez. Un servidor puede bloquearse intentando leer de un socket, cuando puede haber otras conexiones activas. Por otro lado, si el servidor es no bloqueante, debe atender a varias conexiones secuencialmente para ver que conexiones tienen datos, es decir, debe realizar iteraciones constantemente. Solución multiproceso Para resolver los problemas anteriores se pueden tener servidores concurrentes. La estrategia esta basada en tener un proceso atendiendo constantemente al socket de escucha. Cuando se establece una conexión el servidor lanza un proceso hijo con fork() que es el que realmente atiende la conexión a través del socket de dialogo. Se crearán tantos hijos como sea necesario. /*Serveco2.c : Un servidor de eco orientado a conexi on concurrente*/ /* multiproceso basado en sockets.*/ #include <stdlib.h> #include <unistd.h> #include<signal.h> #include <errno.h> /* */ void do_echo(int); /* */ extern int errno; /* */ void do_echo(int fd) char buf[4096]; int cc,org,faltan,cc2; while (cc=read(fd,buf,sizeof(buf))) if (cc<0) perror("read"); exit(6); org=0; faltan=cc; /*Los que hay que mandar*/ while (faltan) if ((cc2=write(fd,&buf[org],faltan))<0) perror("fallo al escribir"); exit(7); org+=cc2; faltan-=cc2; close(fd); /* */ int main() struct sockaddr_in sin,fsin; int s,ssock,alen; sin.sin_family=af_inet; sin.sin_addr.s_addr =htonl(inaddr_any); sin.sin_port =htons(3500); if ((s=socket(pf_inet,sock_stream,0))<0) perror("no se puede crear el socket"); if (bind (s,(struct sockaddr *)&sin,sizeof(sin))<0) perror("no se puede asignar la direcci on"); exit(2); if (listen(s,5)<0) perror("no puedo poner el socket en modo escucha"); exit(3); signal(sigchld, SIG_IGN); while (1) alen=sizeof(fsin); if ((ssock =accept(s, (struct sockaddr *)&fsin,&alen))<0) if (errno == EINTR) continue; perror("fallo en accept"); exit(4); switch (fork()) case -1: perror("no puedo crear hijo"); exit(5); case 0 : close(s); /*Proceso hijo*/ do_echo(ssock); break; default: close(ssock); break; El comando fork() crea una copia casi exacta del proceso que lo invoca devolviendo 0 para el proceso hijo y el pid del proceso hijo para el proceso padre (Ver página man). Esta solución funciona bien cuando los procesos hijos no necesitan compartir información (variables) puesto que cada uno de ellos se ejecuta en un espacio de memoria separado (Telnet, FTP, o WWW). El programa Sereco.c muestra una implementación de esta estrategia. Puede probarse usando: telnet máquina 3500, donde 3500 es el puerto. Aspectos del ejemplo: signal(sigchld, SIG IN); El servidor crea hijos, uno por cada conexión. Cuando la conexión se cierra el proceso hijo se muere. El padre debería realizar un wait() que le bloquea hasta que el hijo muere. Si no se realiza, los hijos se quedan en 7

8 estado zombie. Con la instrucción anterior se ignoran las señales que indican la muerte de los hijos y no los deja en estado zombie. Por último, la función do echo escribe mediante un bucle de llamadas write ya que write no garantiza que se envíe por la conexión el número de bytes solicitados. Práctica 5: Cliente del servicio eco Realizar un cliente TCP para el servidor de eco implementado. Usar después el servidor de eco del sistema, (si está accesible) comprobando primero, a través del fichero /etc/services, el número del puerto asociado a ese servicio. Modificar después el programa para que acceda a dicho servidor, sin conocer previamente el número de puerto, usando la función getservbyname() para obtenerlo Solución monoproceso Vamos a implementar un único proceso que atienda a todas las conexiones gracias a la función select() (Ver página man). Con select() se puede: (i) bloquear varios sockets a la vez, para despertarlos cuando se pueda operar en uno de ellos, (ii) hacer una encuesta simultánea a varios sockets, sin bloqueo y (iii) bloquearnos por un tiempo limitado. Select() tiene cinco argumentos. Los argumentos segundo, tercero y cuarto son del tipo fd set (objetos de E/S, incluidos sockets). El primer argumento indica el tamaño máximo de esos conjuntos (usualmente FD SETSIZE). El último es una estructura de tiempo con segundos y microsegundos. Los tres conjuntos fd set contienen lo siguiente: Primero: Los objetos a examinar para ver si se puede realizar una lectura sobre ellos. Segundo: Los objetos a examinar para ver si se puede escribir sobre ellos. Tercero: Los objetos a examinar para ver si se puede realizar una operación especial sobre ellos. Select monitoriza todos los objetos a la vez durante el tiempo máximo especificado en su último argumento. Dependiendo de este valor, los comportamientos de select() pueden ser: NULL : Select funciona de forma totalmente bloqueante hasta realizar una operación sobre alguno o alguno de los descriptores. 0: Se limita ha hacer una encuesta, retornando inmediatamente. >0 : Select bloquea a sus descriptores y retorna cuando, o bien, expira el temporizador, o bien, se ha realizado una operación sobre algún descriptor. Select devuelve -1 en caso de error y en caso contrario el número de descriptores preparados para realizar una operación. Para saber que descriptores se pueden utilizar hay que examinar el conjunto de descriptores que habrán sido previamente modificados. Para ello existen una serie de macros (ver página man de select para ver sus argumentos): FD SET(): incluye un descriptor en un conjunto de descriptores. FD CLR(): borra un descriptor de un conjunto. FD ISSET(): Devuelve 1 si el descriptor está en el conjunto. FD ZERO(): vacía el conjunto. Como ejemplo de utilización ver el programa Sereco3.c. El servidor de eco Sereco3 gestiona las conexiones de dos en dos. Se usan los descriptores msgocka y msgsockb que en cada iteración se incluyen en el conjunto de descriptores de lectura, para que select los modifique para ver que entradas están activas. Un cliente que se conecte al servidor no puede hacer nada hasta que otro cliente se conecte también. Gracias al funcionamiento de select, si un cliente cierra la conexión el otro puede seguir trabajando. Chequear este comportamiento usando clientes telnet. En un servidor más convencional, el select se hace sobre un conjunto de sockets de escucha cuyo número de elementos puede variar durante la vida del servidor. Sobre este conjunto se realizan las operaciones select(). Si hay alguno activo, se crea una nueva conexión y se introduce el nuevo socket de dialogo en el conjunto. Mientras se da servicio a una conexión se puede detectar el fin de la misma, cerrándola y eliminando el socket asociado del conjunto. 8

9 /*Serveco3.c : Un servidor de eco orientado a conexi on concurrente*/ /* monoproceso basado en sockets.*/ #include <stdlib.h> #include <sys/time.h> #include <unistd.h> #define STDOUT 1 #define SERV_ADDR (IPPORT_RESERVED+1) int main() int rvala, rvalb; int sock, length, msgsocka, msgsockb; int dispuestos; struct sockaddr_in server; fd_set lecturas; char buf[1024]; if ((sock=socket(pf_inet,sock_stream,0))<0) perror("no se puede crear el socket"); server.sin_family=af_inet; server.sin_addr.s_addr =htonl(inaddr_any); server.sin_port =htons(serv_addr); if (bind (sock,(struct sockaddr *)&server,sizeof(server))<0) perror("no se puede asignar la direcci on"); exit(2); listen(sock,1); do msgsocka=accept(sock,(struct sockaddr *)0,(int *)0); if (msgsocka== -1) perror("conexion no aceptada!!!"); exit(-1); msgsockb=accept(sock,(struct sockaddr *)0,(int *)0); if (msgsockb== -1) perror("conexion no aceptada!!!"); exit(-1); do FD_ZERO(&lecturas); FD_SET(msgsocka, &lecturas); FD_SET(msgsockb, &lecturas); dispuestos = select (FD_SETSIZE, &lecturas, (fd_set *)NULL, (fd_set *)NULL,NULL); if (FD_ISSET(msgsocka,&lecturas)) rvala = read(msgsocka,buf,1024); if (rvala<0) perror("mensaje no leido (1)"); else write(stdout,buf,rvala); if (FD_ISSET(msgsockb,&lecturas)) rvalb = read(msgsockb,buf,1024); if (rvalb<0) perror("mensaje no leido (1)"); else write(stdout,buf,rvalb); while ((rvala>0) (rvalb>0)); printf("\n Cerrando las conexiones...\n"); close(msgsocka); close(msgsockb); while (1); 6. El Super-servidor inetd Para evitar tener corriendo tantos servidores (daemons) como servicios ofrece una máquina, se ha diseñado en UNIX un servidor especial llamado inetd que permite poner en ejecución otros servidores, pero solo si son necesarios. También permite que cualquier filtro (programa que lee de la entrada estándar y escribe en la salida estándar) se convierta en servidor. Inetd atiende simultáneamente a los puertos especificados en /etc/inetd.conf. Crea tantos sockets como puertos a atender y después usa select para monitorizar los puertos. Cuando recibe una petición de comunicación por un puerto ejecuta una llamada al sistema fork()seguida de una llamada exec() para poner en marcha el programa apropiado al servicio deseado que se configura de según lo establecido en /etc/inetd.conf. Lo interesante de inetd es que el proceso hijo creado tiene como entrada estándar y como salida estándar el socket a través del cual se comunica el cliente. Cada línea de /etc/inetd.conf contiene lo siguiente: 9

10 Nombre del servicio (como en /etc/services). estilo de comunicación (stream, datagram). Protocolo a emplear (tcp,udp,..) wait/nowait : Nowait implica que tras lanzar el servidor, inetd sigue escuchando, creando servidores adicionales si es necesario. Wait no permite esto. Normalmente se usa nowait para TCP y wait para UDP. Usuario que ejecutará el servidor. Ruta de acceso al servidor. Internal significa que el servicio lo da directamente inetd. Argumentos para el programa servidor. Por lo tanto inetd nos permite incluir servidores de una forma fácil, sin tener que preocuparnos de sockets, direcciones, etc, nuestro programa solo debe leer de la entrada estándar y escribir en la salida estándar, usando si se desean la biblioteca de E/S estándar (hay que usar fflush() cuando sea necesario para evitar los efectos de doble buffering; el de E/S más el de TCP). 7. Aspectos de interés Sockets de datagramas conectados Usar connect() con socket de datagramas simplemente establece un destino por omisión para los datagramas enviados. De esta forma se pueden usar las funciones write(), read(), send(), recv() o cualquier otra que opere sobre un descriptor, sin necesidad de dar la dirección de destino del datagrama. telnet como cliente universal Se puede usar telnet máquina puerto como cliente para cualquier servidor que use TCP, siempre que esté basado en el intercambio de mensajes de texto. Todo lo que escribamos por teclado será entregado al servidor y todo lo que el servidor responda será mostrado por pantalla. Estado de comunicación de nuestros procesos ps: Para ver los procesos que se están ejecutando. Útil para no dejarse, sin desearlo, servidores en ejecución. kill: Para matar procesos que no deseamos que sigan en ejecución. El argumento es el identificador de proceso (PID) mostrado mediante ps. netstat: Muestra el estado de las conexiones de nuestra máquina. Nos indica qué conexiones hay en marcha y las direcciones (IP y puerto) de cada extremo. También da información sobre la actividad en el dominio UNIX. Uso de funciones de E/S estándar con sockets La funciones de entrada salida que se encuentra en stdio.h están diseñadas para manipular objetos del tipo (FILE *), por lo que hay que crear un objeto de tipo FILE asociado al socket usando la función fdopen (Ver página man), cuyo primer argumento es un descriptor de fichero UNIX, obtenido, por ejemplo, mediante open(), pipe() o socket(). El segundo argumento es una cadena que indica el modo de apertura. El uso de FILE lleva asociado un buffer, y puesto que TCP ya utiliza también un buffer, podemos eliminar el de FILE mediante el comando setbuff(), pasándole NULL como segundo argumento. Práctica 6: Sistema sencillo de transferencia de ficheros Basándonos en TCP, crear un servidor, serfichd que no necesita ningún argumento adicional. El cliente, traer se podrá lanzar desde cualquier máquina. Los parámetros de traer son: máquina servidor ficero remoto [fichero local]. El diseño de servfichd se implementará como un servidor iterativo, dejando como opción implementar el concurrente. 10

ARQUITECTURA DE REDES Laboratorio

ARQUITECTURA DE REDES Laboratorio 1nsloo.cl ARQUITECTURA DE REDES Laboratorio Práctica 2: Ejercicios de aplicación de Sockets en C 1. OBJETIVOS. El objetivo de esta práctica es que el alumno llegue a conocer los principales conceptos relacionados

Más detalles

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

Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Preguntas cortas Pregunta 1.1: Si configuro mi servidor Web para que no acepte conexiones desde

Más detalles

Problemas de Redes de Computadores. Conjunto de problemas 1

Problemas de Redes de Computadores. Conjunto de problemas 1 Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Pregunta 1.1: Si configuro mi servidor Web para que no acepte conexiones desde la dirección IP 130.206.1.1,

Más detalles

Estructuras y funciones de programación de sockets.

Estructuras y funciones de programación de sockets. Estructuras y funciones de programación de sockets. Introducción. En estos apuntes se incluye una breve descripción de las estructuras y funciones cuyo uso puede ser necesario para el desarrollo de las

Más detalles

Mecanismos IPC: sockets

Mecanismos IPC: sockets Mecanismos IPC: sockets Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Sockets Los sockets son una abstracción lógica que permiten la comunicación bidireccional

Más detalles

COMUNICACIÓN ENTRE PROCESOS SOCKETS

COMUNICACIÓN ENTRE PROCESOS SOCKETS COMUNICACIÓN ENTRE PROCESOS SOCKETS Diseño de Sistemas Operativos Curso 2007/08 Grupo: Mi30 Martín Santana, A. David Martínez Santana, Luis Ignacio Qué son?(definición) n) Los sockets son mecanismos de

Más detalles

PRÁCTICA 2: Cliente-servidor UDP

PRÁCTICA 2: Cliente-servidor UDP PRÁCTICA 2: Cliente-servidor UDP El objetivo de esta práctica es la familiarización con aplicaciones elementales que usan los servicios de transporte de los sockets UDP. A lo largo de la práctica se realizarán

Más detalles

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

Introducción a la programación con sockets en C Introducción a la programación con sockets en C Enrique Bonet Departamento de Informática Universidad de Valencia Índice Introducción Socket Creación de un socket Cierre de un socket Asociación de un socket

Más detalles

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

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM) s s Comunicación punto-a-punto entre procesos Los s son los extremos de la comunicación Diferentes dominios UNIX: Entre procesos de un mismo equipo Internet: Entre procesos de diferentes equipos (TCP/IP)

Más detalles

Introducción de Sockets en C.

Introducción de Sockets en C. PRÁCTICA 2: Introducción de Sockets en C. 1 La Interfaz Socket es una API para redes TCP/IP que se compone de funciones o rutinas. Originalmente se construyó a principios de los 80 para el sistema operativo

Más detalles

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

Qué es un socket? Dominios de comunicación. Tipos de sockets en el dominio AF_INET. Sockets Stream. Sockets Datagram. Sockets Raw Qué es un socket? Es una interfaz de entrada salida de datos que permite la intercomunicación entre procesos. Los procesos pueden estar ejecutándose en el mismo o en distintos sistemas, unidos mediante

Más detalles

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

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet Sockets (TCP) Tema 2- Nivel de aplicación en Internet Dr Daniel Morató es de Computadores Ingeniero Técnico en Informática de Gestión, 2º curso Material parcialmente adaptado del libro Computer Networking:

Más detalles

Diseño de aplicaciones distribuidas ÍNDICE

Diseño de aplicaciones distribuidas ÍNDICE Aplicaciones Distribuidas (s) Aplicaciones Distribuidas (s) TCP TCP Protocolos de Protocolos de Transporte Transporte UDP UDP STREAM STREAM (TCP) (TCP) SOCKET SOCKET Etapas en la Creación Etapas en la

Más detalles

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

Modem IBM Compatible. IBM Compatible. Ethernet IBM AS/400. Laser printer. Workstation. Mac II. El Interfaz. Socket. versión perliminar IBM Compatible Modem IBM Compatible Ethernet IBM AS/400 Laser printer Workstation Mac II El Interfaz Socket versión perliminar ÍNDICE 1. INTRODUCCIÓN. 2. QUÉ ES UN SOCKET?. 2.1. Dominio de un socket. 2.2.

Más detalles

Redes (IS20) Ingeniería Técnica en Informática de Sistemas - (2º Curso)

Redes (IS20) Ingeniería Técnica en Informática de Sistemas - (2º Curso) Redes (IS20) Ingeniería Técnica en Informática de Sistemas - (2º Curso) Práctica 2: Programación en Red. Protocolos TCP y UDP. Comunicación entre procesos mediante Sockets Descripción del equipo: 1. Ordenadores

Más detalles

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

SOCKETS en Linux. Lic. Leonardo de - Matteis. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011 Introducción al uso de SOCKETS en Linux Lic. Leonardo de - Matteis Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011 Interfaz de programación de aplicaciones NAPI

Más detalles

Tema 5 El Modelo Cliente-Servidor

Tema 5 El Modelo Cliente-Servidor 1 Tema 5 El Modelo Cliente-Servidor Capítulos: Conceptos básicos. Características y estructura de un cliente. Obtención de información. Algoritmos del cliente TCP y UDP. Ejemplos. Características y estructura

Más detalles

Arquitectura de Redes y Servicios de Telecomunicación

Arquitectura de Redes y Servicios de Telecomunicación Práctica 3 Arquitectura de Redes y Servicios de Telecomunicación Programación cliente/servidor: Servicio de echo. Desarrollo de un cliente y un servidor del servicio de echo. Objetivos La programación

Más detalles

Programación con Sockets

Programación con Sockets Programación con Sockets INTRODUCCIÓN 1 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

Más detalles

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

UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA MANUAL DE SOCKETS EN C TABLA DE CONTENIDOS Introducción.. 4 Sockets en C.. 7 2.1 Conceptos Básicos..

Más detalles

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

Sockets: funcionamiento y programación. Sockets tipo UNIX. MSc. Ivan A. Escobar Sockets tipo UNIX MSc. Ivan A. Escobar Creación socket: socket() int socket(familia, tipo, protocolo) Regresa un valor entero Parecido descriptor de archivos: descriptor socket sockfd int familia familia

Más detalles

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

Clase de Sockets en lenguaje C. Prof. Ricardo González Clase de Sockets en lenguaje C Prof. Ricardo González 1 Modelo de Programación Cliente-Servidor Cliente: un programa que envía peticiones. Servidor: un programa que ofrece un servicio que satisface peticiones

Más detalles

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

Bibliografía [COM00] Internetworking with TCP/IP, vol. 3, Cap. 2 y del 7 al 15. Tema 5: El Modelo Cliente-Servidor Conceptos básicos. Características y estructura de un cliente. Obtención de información. Algoritmos del cliente TCP y UDP. Ejemplos. Características y estructura de un

Más detalles

Sistema Cliente Servidor Con Sockets

Sistema Cliente Servidor Con Sockets Sistema Cliente Servidor Con Sockets Rafael Benedicto Tovar Antonio Soler Muñoz 0 Índice 1. Resumen del proyecto 2 Introducción teórica 2.1 - Qué es un socket? 2.2 - Dominios de comunicación 2.3 - Tipos

Más detalles

Características de un lenguaje ideal para robótica

Características de un lenguaje ideal para robótica COMUNICACIÓN MEDIANTE SOCKETS Enrique Ortega Edrodoso Ingeniería Técnica de Informática de Gestión Introducción Los vehículos autoguiados comerciales disponibles en la actualidad tienen una serie de inconvenientes

Más detalles

Programación de aplicaciones distribuidas usando sockets

Programación de aplicaciones distribuidas usando sockets Programación de aplicaciones distribuidas usando sockets 1 a Versión: José Luis Díaz. Octubre 1994. 2 a Versión: José Ramón Arias. Nov. 1998, Oct. 1999, Oct. 2000. Índice general 1. Programación de aplicaciones

Más detalles

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX DESARROLLO DE APLICACIONES DISTRIBUIDAS PRÁCTICAS CURSO 2002-2003 SOCKETS en UNIX 1. Los SOCKETS en OSI/ISO - Como ya conocéis, el modelo OSI/ISO estructura los diferentes elementos que conforman una red

Más detalles

Migrando aplicaciones a IPv6

Migrando aplicaciones a IPv6 Migrando aplicaciones a Fundamentos técnico: DualStack y Socket.h Alonso Sandoval A. Hernán Vargas L. Universidad Técnica Federico Santa María asandova@alumnos.inf.utfsm.cl, hvargas@alumnos.inf.utfsm.cl

Más detalles

Introducción a Sockets en Linux

Introducción a Sockets en Linux Introducción a Sockets en Linux Horacio Goetendía Bonilla 6 de Enero de 2003 Índice 1. Conceptos 2 1.1. Socket............................... 2 2. Sockets en Unix standar 2 2.1. Namespace (int dominio)(dominio

Más detalles

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

Ingeniería Técnica de Telecomunicación, esp. Telemática Universidad de Jaén Contenido. Introducción Primitivas Sockets orientadas a conexión (TCP) Primitivas orientadas a no conexión (UDP) Programación con Sockets en Internet Funciones sockets Funciones auxiliares 1 Bibliografía.

Más detalles

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

Sockets (UDP) Tema 2.- Nivel de aplicación en Internet Sockets (UDP) Tema 2.- Nivel de aplicación en Internet Dr. Daniel Morató es de Computadores Ingeniero Técnico en Informática de Gestión, 2º curso Sockets y UDP UDP: no hay conexión entre cliente y servidor»

Más detalles

Programación C/S Básica

Programación C/S Básica 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)

Más detalles

Análisis Experimental de la Transmisión de Datos

Análisis Experimental de la Transmisión de Datos UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA DEPARTAMENTO DE ELECTRÓNICA Análisis Experimental de la Transmisión de Datos ELO322 Redes de Computadores I Pablo Ahumada D. Jorge Cápona G. Resumen Se muestra

Más detalles

SOCKET S. Alberto Castro Rojas

SOCKET S. Alberto Castro Rojas SOCKET S EL64E Alberto Castro Rojas 1 Interfaz de programación genérica Soporte de múltiples suites de protocolos de comunicación (familias) Representaciones de direcciones sin dependencias (endpoint)

Más detalles

07 << Acceso en exclusiva al recurso compartido >>

07 << Acceso en exclusiva al recurso compartido >> Sistemas Operativos 4º Semestre. Grados II y MI Cuarto Parcial. Sistema de Ficheros. 2 de Junio de 2014. Dispone de 50 minutos. Publicación de notas el Jueves 5 de Junio 2014. Revisión el Viernes 6 de

Más detalles

Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Tema 7 : Comunicación mediante sockets Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Introducción Los sockets (también

Más detalles

Tema 4: Sockets: Un interfaz con TCP/IP

Tema 4: Sockets: Un interfaz con TCP/IP Tema 4: Sockets: Un interfaz con TCP/IP Introducción. Conceptos básicos. Dirección de un socket. Llamadas básicas de los sockets. Diferencias entre BSD-Sockets y WinSockets. Asignación de puertos a procesos.

Más detalles

Programación con sockets

Programación con sockets Programación con sockets Internetworking with TCP/IP Client/Server Programming and Applications: Linux/POSIX Sockets Version Douglas E. Comer David L. Stevens Capítulos: 2, 5, 7 Grupo de Sistemas y Comunicaciones

Más detalles

Sockets Básicos. Sockets Básicos

Sockets Básicos. Sockets Básicos Sockets Básicos Pedro Merino Gómez Jesus Martínez Cruz Dpto. Lenguajes y Ciencias de la Computación Universidad de Málaga Sockets Básicos Temas a tratar... APIS para acceso a TCP/IP El socket como descriptor

Más detalles

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

-> Todo socket viene definido por dos características fundamentales: LOS SOCKETS. Los sockets no son más que puntos o mecanismos de comunicación entre procesos que permiten que un proceso hable (emita o reciba información) con otro proceso incluso estando estos procesos

Más detalles

Sockets Básicos. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. Temas a tratar...

Sockets Básicos. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. Temas a tratar... Sockets Básicos Pedro Merino Gómez Jesus Martínez Cruz Dpto. Lenguajes y Ciencias de la Computación Universidad de Málaga Temas a tratar... Sockets Básicos El como descriptor para E/S Funciones básicas

Más detalles

ARQUITECTURA DE REDES Laboratorio

ARQUITECTURA DE REDES Laboratorio 1nsloo.cl ARQUITECTURA DE REDES Laboratorio Práctica 4: Ejercicios de aplicación de HTTP 1. OBJETIVOS. El objetivo de esta práctica es que el alumno llegue a conocer los principales conceptos relacionados

Más detalles

Adaptación de aplicaciones a IPv6

Adaptación de aplicaciones a IPv6 Adaptación de aplicaciones a IPv6 extensión de la interfaz de sockets Eva M. Castro ecastro@dit.upm.es Tutorial IPv6 -Adaptación de aplicaciones a IPv6 1 Contenido * Introducción Modelo de sockets BSD

Más detalles

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

TimeOut RTT medido 1 5 seg. 2*5= 10 1 2 0,7 3 TimeOut 3 TimeOut 3 0,001 4 0,35 5 0,44 ARQUITECTURA DE REDES Y SERVICIOS DE TELECOMUNICACIÓN Junio 2014 Teoría: 1) Qué sucedería si por error recibiera UDP un datagrama UDP que originalmente iba destinado a otra máquina?. (0,5 ptos) 2) Asumiendo

Más detalles

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA Índice 1. Presentación...3 2. Conceptos básicos...4 2.1. TCP...4 2.2.

Más detalles

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

TELEPROCESO Y SISTEMAS DISTRIBUIDOS Universidad Nacional del Nordeste TELEPROCESO Y SISTEMAS DISTRIBUIDOS La Interfaz Socket Lic. Vanesa S. Roffé Año 2009 Introducción - Origen de la INTERFAZ SOCKET La Interfaz Socket es una API para redes

Más detalles

Juan de Dios Murillo Morera e-mail: jmurillo@una.ac.cr Santiago Caamaño Polini e-mail: scaamano@costarricense.cr INTRODUCCIÓN

Juan de Dios Murillo Morera e-mail: jmurillo@una.ac.cr Santiago Caamaño Polini e-mail: scaamano@costarricense.cr INTRODUCCIÓN UNICIENCIA 24 pp. 83-89 2010 IMPLEMENTACIÓN DE UN SERVIDOR FTP UTILIZANDO EL MODELO CLIENTE/SERVIDOR MEDIANTE EL USO DE SOCKETS EN LENGUAJE C UNIX CON EL FIN DE MEJORAR LOS TIEMPOS DE RESPUESTA EN LA RED

Más detalles

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

ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C. Grado en Ingeniería Informática Curso 2014/15 ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C Grado en Ingeniería Informática Curso 2014/15 ÍNDICE 1. INTRODUCCIÓN.. 3 1.1 La familia de protocolos TCP/IP. 3 1.2 Nivel de red (IP)..

Más detalles

1.- FUNDAMENTOS...2 2.- FUNCIONAMIENTO GENÉRICO...3 3.- JAVA SOCKETS... 4. 3.4.1.- Creación de Streams de Entrada...7

1.- FUNDAMENTOS...2 2.- FUNCIONAMIENTO GENÉRICO...3 3.- JAVA SOCKETS... 4. 3.4.1.- Creación de Streams de Entrada...7 1.- FUNDAMENTOS...2 2.- FUNCIONAMIENTO GENÉRICO...3 3.- JAVA SOCKETS... 4 3.1.- INTRODUCCION... 4 3.2.- MODELO DE COMUNICACIONES CON JAVA...5 3.3.- APERTURA DE SOCKETS... 6 3.4.- CREACIÓN DE STREAMS...

Más detalles

Práctica 1: sockets en Python

Práctica 1: sockets en Python Práctica 1: sockets en Python Álvaro Navarro anavarro@gsyc.es Jesús M. González-Barahona jgb@gsyc.es Infraestructura de Redes 5 o Ingeniería Informática 08/09 1. Fase 1: Cliente UDP Esta primera fase tiene

Más detalles

Programación de sockets

Programación de sockets Programación de sockets Xavier Perramon Tornil Enric Peig Olivé P03/75064/00978 FUOC P03/75064/00978 Programación de sockets Índice Introducción... 5 Objetivos... 6 1. Qué son los sockets... 7 1.1. Visión

Más detalles

Sistemas Operativos Práctica 3

Sistemas Operativos Práctica 3 Sistemas Operativos Práctica 3 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que

Más detalles

Examen de Fundamentos de Redes de Computadores Junio 2005

Examen de Fundamentos de Redes de Computadores Junio 2005 Examen de Fundamentos de Redes de Computadores Junio 2005 1. (1.5 puntos) Se quiere enviar un mensaje de 20 Kbytes entre dos hosts conectados directamente. La conexión entre ellos presenta las siguientes

Más detalles

Sistemas Operativos I Manual de prácticas

Sistemas Operativos I Manual de prácticas Sistemas Operativos I Manual de prácticas Grupo de Sistemas Operativos (DSIC/DISCA) Práctica 3: Procesos POSIX ANTES DE EMPEZAR...... 2 PRÁCTICA 3: PROCESOS POSIX... 2 CREACIÓN DE PROCESOS MEDIANTE FORK...

Más detalles

IMPLEMENTACIÓN DE APLICACIONES DE SEGURIDAD CON OPENSSL

IMPLEMENTACIÓN DE APLICACIONES DE SEGURIDAD CON OPENSSL IMPLEMENTACIÓN DE APLICACIONES DE SEGURIDAD CON OPENSSL Índice Lectura de Certificados con OpenSSL I Proyecto Leer_certificado1 Lectura de Certificados con OpenSSL II Proyecto Leer_certificado2 Proyecto

Más detalles

Práctica 5: Servidor web concurrente en Java

Práctica 5: Servidor web concurrente en Java Práctica 5: Servidor web concurrente en Java Esta práctica pretende familiarizar al alumno con la programación de servidores que emplean sockets TCP. Para ello partiremos del servidor web básico visto

Más detalles

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

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. http://www.icc.uji.es. CAPÍTULO 8: El nivel de transporte en Internet Redes (IS20) Ingeniería Técnica en Informática de Sistemas http://www.icc.uji.es CAPÍTULO 8: El nivel de transporte en Internet ÍNDICE 1. Introducción Curso 2002-2003 - Redes (IS20) -Capítulo 8 1 1. Introducción

Más detalles

Administración de redes en GNU/Linux

Administración de redes en GNU/Linux Administración de redes en GNU/Linux La configuración de una red en UNIX/Linux es en cierta medida más compleja que en sistemas Microsoft. Sin embargo para numerosos administradores tiene un mayor grado

Más detalles

Nivel de Transporte en Internet

Nivel de Transporte en Internet Nivel de Transporte en Internet Nivel de Transporte en TCP/ La capa de transporte transmite mensajes entre las aplicaciones de dos ordenadores. La programación de aplicaciones sobre el nivel de transporte

Más detalles

Red LSUB. 4 de marzo de 2015 GSYC

Red LSUB. 4 de marzo de 2015 GSYC Red LSUB GSYC 4 de marzo de 2015 (cc) 2015 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Arquitectura de Redes y Servicios de Telecomunicación (ARST) Cuestiones y Problemas Propuestos

Arquitectura de Redes y Servicios de Telecomunicación (ARST) Cuestiones y Problemas Propuestos Sobre el Protocolo UDP 1. Qué sucedería si por error recibiera UDP un datagrama UDP destinado a otra máquina (con otra dirección IP)?. 2. Por qué es necesario incluir un checksum en IP, TCP y opcionalmente

Más detalles

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA SOCKETS EN JAVA Los sockets son puntos finales de enlaces de comunicaciones entre procesos. Los procesos los tratan como descriptores de ficheros, de forma que se pueden intercambiar datos con otros procesos

Más detalles

Programas de Administración de red

Programas de Administración de red 1 Programas de Administración de red Introducción El propósito de las siguientes prácticas es el de familiarizar al alumno con los distintos programas que se utilizan para chequear y comprobar el estado

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor Creación de Sockets Cliente/Servidor Sockets en TCP Sockets en UDP Definición de DAEMON Concepto de Hilos Qué es un socket? Un socket

Más detalles

Asignatura: Laboratorio de Computadores. Curso 2007-08. 5º Semestre, 3er. Curso. Ingeniería Informática. Práctica de SOCKETS

Asignatura: Laboratorio de Computadores. Curso 2007-08. 5º Semestre, 3er. Curso. Ingeniería Informática. Práctica de SOCKETS Asignatura: Laboratorio de Computadores. Curso 2007-08. 5º Semestre, 3er. Curso. Ingeniería Informática. Práctica de SOCKETS Especificación de la práctica: Un protocolo sencillo para transferencia de ficheros

Más detalles

Estructuras y funciones de programación de sockets.

Estructuras y funciones de programación de sockets. Estructuras y funciones de programación de sockets. Introducción. Autor: Enrique Bonet En estos apuntes se incluye una breve descripción de las estructuras y funciones cuyo uso puede ser necesario para

Más detalles

AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA

AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA 1 Definición de Socket Punto de comunicación entre procesos, mediante el cual

Más detalles

SISTEMAS DE COMUNICACIONES DE DATOS

SISTEMAS DE COMUNICACIONES DE DATOS SISTEMAS DE COMUNICACIONES DE DATOS Técnicas Digitales III Ing. Gustavo Nudelman 2012 Fundamentos de Networking Subtitulo o nombre del capitulo Capitulo 1 Universidad Tecnológica Nacional Definiciones

Más detalles

Federico Peinado www.federicopeinado.es

Federico Peinado www.federicopeinado.es Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

Más detalles

Tema 4.1: - TRANSPORTE-

Tema 4.1: - TRANSPORTE- Tema 4.1: - TRANSPORTE- -Introducción - Terminología OSI - Tipologia y complejidad - Servicios - Calidad de servicio - Conexiones de transporte - Transporte en Internet - Introducción. Su función básica

Más detalles

Sistemas Operativos Distribuidos

Sistemas Operativos Distribuidos Sockets Sistemas Distribuidos Sockets Aparecieron en 1981 en UNIX BSD 4.2 Intento de incluir TCP/IP en UNIX. Diseño independiente del protocolo de comunicación. Un socket es punto final de comunicación

Más detalles

WSAEADDRNOTAVAIL (10049) Dirección solicitada no se puede asignar.

WSAEADDRNOTAVAIL (10049) Dirección solicitada no se puede asignar. CÓDIGOS DE ERRORES AL UTILIZAR MODO I PARA ENVIAR MAILS A continuación se presenta una lista de los códigos de errores que pueden ocurrir al realizar la llamada WSAGetLastError, y una explicación detallada

Más detalles

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Curso de Redes I CI-4815 Trimestre Septiembre Diciembre 2013

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Curso de Redes I CI-4815 Trimestre Septiembre Diciembre 2013 Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Curso de Redes I CI-4815 Trimestre Septiembre Diciembre 2013 Proyecto I Autores: Lairon Acosta. Carnet: 09-10927 Jueves

Más detalles

Programación en red sobre TCP/IP Interface sockets

Programación en red sobre TCP/IP Interface sockets Programación en red sobre TCP/IP Interface sockets Teresa Monreal y Pablo Ibáñez Area de Arquitectura y Tecnología de Computadores Departamento de Informática e Ingeniería de Sistemas 1 Indice Introducción.

Más detalles

APLICACIONES de PROTOCOLOS del NIVEL de APLICACION

APLICACIONES de PROTOCOLOS del NIVEL de APLICACION APLICACIONES de PROTOCOLOS del NIVEL de APLICACION OBJETIVOS: Familiarizar al alumno con aplicaciones básicas montadas sobre protocolos del nivel de aplicación que se apoyan sobre TCP/IP. o Aplicaciones:

Más detalles

Lab 01: Programación de Sockets en TCP

Lab 01: Programación de Sockets en TCP UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO Departamento Académico de Informática REDES Y TELECOMUNICACIONES 2 Lab 01: Programación de Sockets en TCP Ingº Manuel Peñaloza Figueroa Dime y lo olvidaré.

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 11 Nombre: Manejo de archivos Contextualización En los lenguajes de programación estructurada como C, que carecían de una conexión a base

Más detalles

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

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente 3 o curso de Ingeniería Técnica en Informática de Sistemas 13 de abril de 2007 El objetivo de esta práctica es realizar una

Más detalles

Ejercicio 1. Diseñe utilizando sockets el mecanismo de comunicación de las colas de mensajes POSIX.

Ejercicio 1. Diseñe utilizando sockets el mecanismo de comunicación de las colas de mensajes POSIX. Ejercicios Tema 5 Aplicaciones clientes servidor y sockets Ejercicio 1. Diseñe utilizando sockets el mecanismo de comunicación de las colas de mensajes POSIX. Ejercicio 2. Un hospital, con 200 habitaciones,

Más detalles

Arquitecturas cliente/servidor

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

Más detalles

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

Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros. Comunicaciones Comunicaciones: Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros. Terminología: Trama: unidad de información a transmitir Medio:

Más detalles

ARQUITECTURAS CLIENTE/SERVIDOR

ARQUITECTURAS CLIENTE/SERVIDOR Arquitecturas Cliente/Servidor, Sem 2016-1 M.I.Yasmine Macedo Reza 1 ARQUITECTURAS CLIENTE/SERVIDOR Conceptos básicos Arquitecturas Cliente/Servidor, Sem 2016-1 M.I.Yasmine Macedo Reza 2 Conceptos básicos

Más detalles

Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida

Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida Prueba de Laboratorio APELLIDOS: NOMBRE: GRUPO DE LABORATORIO: Indicaciones: No se permiten libros, apuntes ni teléfonos móviles. Cuando tenga una solución al ejercicio muéstrela al profesor (compilación

Más detalles

Taller de Sistemas Operativos Introducción

Taller de Sistemas Operativos Introducción Taller de Sistemas Operativos Introducción Escuela de Ingeniería Civil en Informática Universidad de Valparaíso, Chile http:// Conceptos generales 2 Proceso stdin Descriptor Flujo (FILE*) 0 stdout 1 Proceso

Más detalles

Esquema de un programa en C: bloques básicos

Esquema de un programa en C: bloques básicos Esquema de un programa en C: bloques básicos // Incluimos los ficheros de cabecera que necesitemos. // Esto es un comentario #include #include // Si queremos definir alguna constante,

Más detalles

PRÁCTICA 4. A continuación se resumen algunos de los parámetros más interesantes del comando:

PRÁCTICA 4. A continuación se resumen algunos de los parámetros más interesantes del comando: LABORATORIO DE REDES PRÁCTICA 4 GRAFO DE ESTADOS DE TCP Y CONTROL DE FLUJO DE TCP INTRODUCCIÓN El objetivo de esta práctica de laboratorio es observar los cambios de estados que se producen en una conexión

Más detalles

Comunicación entre procesos mediante Sockets Preparado por Gabriel Astudillo Muñoz Escuela de Ingeniería Civil Informática Universidad de Valparaíso

Comunicación entre procesos mediante Sockets Preparado por Gabriel Astudillo Muñoz Escuela de Ingeniería Civil Informática Universidad de Valparaíso 1 Resumen Comunicación entre procesos mediante Sockets Preparado por Gabriel Astudillo Muñoz Escuela de Ingeniería Civil Informática Universidad de Valparaíso Este documento tiene como objetivo describir

Más detalles

Unidad 2: Gestión de Procesos

Unidad 2: Gestión de Procesos Unidad 2: Gestión de Procesos Tema 4, Procesos: 4.1 El concepto de proceso. 4.2 Planificación de procesos. 4.3 Procesos cooperativos. 4.4 Hilos (threads). Informática (Segovia) 1 4.1 El concepto de proceso.

Más detalles

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA Qué es la arquitectura cliente servidor? La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las tareas se reparten

Más detalles

Computación de Alta Performance Curso 2009 PROGRAMACIÓN PARALELA EN LENGUAJE C

Computación de Alta Performance Curso 2009 PROGRAMACIÓN PARALELA EN LENGUAJE C Computación de Alta Performance Curso 2009 MECANISMO DE PROGRAMACIÓN PARALELA EN LENGUAJE C AGENDA Mecanismos a estudiar. Fork. Pipes y FIFOs. System V IPC: Semáforos. Cola de mensajes. Memoria compartida.

Más detalles

El lenguaje de Programación C. Fernando J. Pereda

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

Más detalles

ESCUELA POLITÉCNICA NACIONAL

ESCUELA POLITÉCNICA NACIONAL ESCUELA POLITÉCNICA NACIONAL ESCUELA DE INGENIERÍA ELÉCTRICA UTILIZACIÓN DEL PROTOCOLO FTP PARA LA TRANSFERENCIA DE INFORMACIÓN DE GESTIÓN PROYECTO PREVIO A LA OBTENCIÓN DEL TÍTULO DE INGENIERO ESPECIALISTA

Más detalles

; hcomment.rc HTTP://AA.ES/INFO.HTML http://www.bb.com http://www.cc.org/a.html aa.es www.bb.com www.cc.org ;

; hcomment.rc HTTP://AA.ES/INFO.HTML http://www.bb.com http://www.cc.org/a.html aa.es www.bb.com www.cc.org ; Examen de Sistemas Operativos ITIS Fuenlabrada Mayo 2011 Problema: Llamadas al sistema (3 puntos) Implemente en C para Plan 9 un programa hlines que a partir de una URL que se le pasa como argumento, escriba

Más detalles

SOLUCION EXAMEN junio 2006

SOLUCION EXAMEN junio 2006 SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los

Más detalles

DESARROLLO DE FUNCIONES EN EL SISTEMA INFORMÁTICO EJEMPLO DE CUESTIONES BÁSICAS A CONOCER:

DESARROLLO DE FUNCIONES EN EL SISTEMA INFORMÁTICO EJEMPLO DE CUESTIONES BÁSICAS A CONOCER: DESARROLLO DE FUNCIONES EN EL SISTEMA INFORMÁTICO EJEMPLO DE CUESTIONES BÁSICAS A CONOCER: 1) Para que sirve la función wait ( & dato ) y que valor se obtendría en la variable dato. 2) Diferencias entre

Más detalles

Tema 4 El paradigma cliente-servidor

Tema 4 El paradigma cliente-servidor Tema 4 El paradigma cliente-servidor F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García Sistemas Distribuidos Grado en Ingeniería Informática Universidad Carlos III de

Más detalles

Para esto, he desarrollado una aplicación en Visual Studio con tres proyectos, como se presenta en la siguiente ilustración:

Para esto, he desarrollado una aplicación en Visual Studio con tres proyectos, como se presenta en la siguiente ilustración: Caso Práctico: Diffie-Hellman sobre socket de C# Este caso práctico se abordará en el ámbito de aplicaciones cliente/servidor; programación con Socket. Se aplicará el lenguaje C#, el.net Framework 3.5

Más detalles

Si el fichero hashes existe, el script debe notificar el error y salir como corresponde. A continuación se muestra un ejemplo:

Si el fichero hashes existe, el script debe notificar el error y salir como corresponde. A continuación se muestra un ejemplo: Examen de Sistemas Operativos ITIS Fuenlabrada Junio 2009 Tiempo total: 3 horas. Problema: Llamadas al sistema (5 puntos) Escriba en C para Plan 9 un programa llamado catsha1 cuyo propósito es crear un

Más detalles

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA Sockets para servidor Daniel Díaz Sánchez Florina Almenárez Andrés Marín Departamento de Ingeniería Telemática Universidad Carlos

Más detalles