Sistema Cliente Servidor Con Sockets
|
|
- Alejandra López Montero
- hace 8 años
- Vistas:
Transcripción
1 Sistema Cliente Servidor Con Sockets Rafael Benedicto Tovar Antonio Soler Muñoz
2 0 Índice 1. Resumen del proyecto 2 Introducción teórica Qué es un socket? Dominios de comunicación Tipos de sockets en el dominio AF_INET Byte order Pasos para establecer la conexión Ejemplo cliente-servidor TCP simple 3 Código utilizado en la práctica 3.1 Cliente 3.2 Servidor Principal 3.3 Servidor Secundario Tipo 3.4 Makefile 4 Métodos y estructuras implicados en la práctica 4.1 Métodos 4.2 Estructuras 5 Ejemplo de aplicación 6 Seguridad 7 Bibliografía
3 1. Resumen del proyecto En este proyecto vamos a crear un sistema de descargas mediante la programación de socket. Para ello utilizaremos una aplicación cliente, una aplicación servidora principal y cuatro servidoras secundarias. La aplicación cliente realizara peticiones a los servidores en función del archivo deseado ya sea un documento, un video, una canción o una imagen. La aplicación servidora contendrá documentos con los contenidos del resto de servidores secundarios, así cuando un cliente necesite saber que archivos tiene un servidor en concreto no tendrá más que pedírselo al servidor principal. Además generará un log en el cual se guardarán todas las peticiones realizadas por los clientes. Por ultimo están los servidores secundarios que como ya comentamos son 4: 1. Servidor secundario de imágenes 2. Servidor secundario de video 3. Servidor secundario de audio 4. Servidor secundario de documentos Depende del tipo de archivo que desee el cliente se conectara al servidor correspondiente. Estos servidores nada mas arrancar generan un archivo con que lista todos sus contenidos, dicho archivo es enviado al servidor principal Por otra parte al igual que hace el servidor principal los secundarios contendrán un log con toda la información perteneciente a las peticiones recibidas de los usuarios. Por ultimo aclarar que los servidores funcionarán bajo el protocolo de transporte TCP de forma concurrente, de manera que podrán atender varias peticiones simultáneas sin problemas.
4 2 Introducción teórica 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 una red Dominios de comunicación Los sockets se crean dentro de un dominio de comunicación, igual que un archivo se crea dentro de un filesystem. El dominio de comunicación nos dice donde se encuentran los procesos que se van a intercomunicar. Si los procesos están en el mismo sistema, el dominio de comunicación será AF_UNIX, si los procesos están en distintos sistemas y estos se hallan unidos mediante una red TCP/IP, el dominio de comunicación será AF_INET. Cabe aclarar que existen otros dominios de comunicación. Los sockets no se han diseñado solamente para TCP/IP. La idea original fue que se usase la misma interfaz también para distintas familias de protocolos. En esta introducción solo trataremos el dominio AF_INET. Algunos dominios: AF_INET ( unidos mediante una red TCP/IP). AF_UNIX (en el mismo sistema). Otros dominios.
5 2.3 - Tipos de sockets en el dominio AF_INET Sockets Stream. Sockets Datagram. Sockets Raw. Sockets Stream son los más utilizados, hacen uso del protocolo TCP, el cual nos provee un flujo de datos bidireccional, secuenciado, sin duplicación de paquetes y libre de errores. Sockets Datagram hacen uso del protocolo UDP, el cual nos provee un flujo de datos bidireccional, pero los paquetes pueden llegar fuera de secuencia, pueden no llegar o contener errores. Por lo tanto el proceso que recibe los datos debe realizar resecuencionamiento, eliminar duplicados y asegurar la confiabilidad. Se llaman también sockets sin conexión, porque no hay que mantener una conexión activa, como en el caso de sockets stream. Son utilizados para transferencia de información paquete por paquete. Ejemplo: dns, tftp, bootp, etc. Entones podríamos preguntar: Cómo hacen estos programas para funcionar si pueden perder datos? -Ellos implementan un protocolo encima de UDP que realiza control de errores. Sockets raw no son para el usuario más común, son provistos principalmente para aquellos interesados en desarrollar nuevos protocolos de comunicación o para hacer uso de facilidades ocultas de un protocolo existente.
6 2.4 - Byte order Network byte order y Host byte order son dos formas en las que el sistema puede almacenar los datos en memoria. Está relacionado con el orden en que se almacenan los bytes en la memoria RAM. Si al almacenar un short int (2 bytes) o un long int (4 bytes) en RAM, en la posición más alta se almacena el byte menos significativo, entonces está en network byte order, caso contrario es host byte order. Network byte order. short int. Host byte order. short int. byte mas significativo byte menos significativo Direccion n n+1 long int. byte mas significativo byte menos significativo Direccion n+1 n long int. byte mas significativo byte menos significativo byte mas significativo byte menos significativo Direccion n n+1 n+2 n+3 Direccion n+3 n+2 n+1 n Esto depende del microprocesador que se esté utilizando, podríamos estar programando en un sistema host byte order o network byte order, pero cuando enviamos los datos por la red deben ir en un orden especificado, sino enviaríamos todos los datos al revés. Lo mismo sucede cuando recibimos datos de la red, debemos ordenarlos al orden que utiliza nuestro sistema. Debemos cumplir las siguientes reglas: Todos los bytes que se transmiten hacia la red, sean números IP o datos, deben estar en network byte order. Todos los datos que se reciben de la red, deben convertirse a host byte order.
7 Para realizar estas conversiones utilizamos las funciones que se describen a continuación. htons() - host to network short - convierte un short int de host byte order a network byte order. htonl() - host to network long - convierte un long int de host byte order a network byte order. ntohs() - network to host short - convierte un short int de network byte order a host byte order. ntohl() - network to host long - convierte un long int de network byte order a host byte order.
8 2.5 - Pasos para establecer la conexión Primero haremos una descripción funcional, para luego poder realizar un estudio más detallado de cada función utilizada. Ambos, cliente y servidor, deben crean un socket mediante la función socket(), para poder comunicarse. El servidor llama a bind() para darle un nombre al socket, para luego poder recibir conexiones, es decir establece por cual número de puerto escuchará. Por ejemplo si este sería un servidor de telnet, establecería el puerto 23. Para el cliente no es necesario establecer el número de puerto, porque no recibirá intentos de conexión, sólo intentará conectarse con el servidor. El servidor habilita su socket para poder recibir conexiones, llamando a la función listen(). El cliente no necesita realizar este paso porque no va a recibir conexiones, solo intentará conectarse con el servidor. El servidor ejecuta la función accept() y queda en estado de espera, la función accept() no retorna hasta que intenten conectarse. El cliente usa la función connect() para realizar el intento de conexión, en ese momento la función accept() del servidor retorna con un parámetro que es un nuevo descriptor de socket, el cual se utiliza para realizar la transferencia de datos por la red con el cliente. Una vez establecida la conexión se utilizan las funciones send() y recv() con el descriptor de socket del paso anterior para realizar la transferencia de datos. Para finalizar la conexión se utilizan las funciones close() o shutdown().
9 2.6 - Ejemplo cliente-servidor TCP simple Luego del accept() el servidor queda en estado de espera hasta que el cliente intente conectarse. El cliente trata de conectarse con connect() y accept() retorna con un nuevo descriptor de socket, el cual es utilizado por el server para realizar la transferencia de datos con el cliente. Mientras está realizando transferencia de datos con un cliente, los intentos de conexión de otros clientes son almacenados en una cola de conexiones, que luego serán atendidos. Los clientes se atienden de a uno por vez en este tipo de aplicación cliente-servidor.
10 3 Código utilizado en la práctica 3.1 Cliente /******************************************************************************************** cliente.c : Un cliente para el servidor de ficheros basado en socket ********************************************************************************************/ // Importamos las librerias necesarias para la realizacion de las comunicaciones de socket #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define SERV_ADDR (IPPORT_RESERVED+1) // Servidor principal #define SERV_ADDR1 (IPPORT_RESERVED+2) //Servidor de IMG #define SERV_ADDR2 (IPPORT_RESERVED+3) //Servidor de AUD #define SERV_ADDR3 (IPPORT_RESERVED+4) //Servidor de VID #define SERV_ADDR4 (IPPORT_RESERVED+5) //Servidor de DOC //Metodo utilizado para al recepcion de paquetes. int recibir(char *nombre, int s); /********************************************************************************************** METODO RECIBIR ***********************************************************************************************/ int recibir(char *nombre, int s){ FILE* archivorec; int length = 1024; char buffer[1024]; // Creamos el archivo donde se copiaran todos los paquetes que nos lleguen de la descarga archivorec = fopen(nombre, "wb"); // Copia en el archivo creado los distintos paquetes que nos llegan // Siempre entra almenos una vez pq hemos puesto el valor de length por defecto a 1024 // Ademas siempre da una vuelta de mas para asegurarse de que mande el ultimo paquete aunque // este sea de un tamaã±o menor de 1024 while (length == 1024){ length = recv(s, buffer, 1024, 0); if (length < 0) { perror("hubo UN ERROR: no se pudo recibir los datos."); return 6; printf("\ntamano PAQUETE RECIBIDO= %i\n", length); // esto solo se da en las peticiones a servidor primario if(strlen(nombre)==3){ printf("recibido : \n\n"); printf(buffer); if (fwrite(buffer, 1, length, archivorec) < 0) { perror("hubo UN ERROR: No se pudo escribir en el archivo."); return 7; printf("\n\n Conexion cerrada.\n");
11 // Cerramos el descriptor close(s); // Cerramos el archivo fclose(archivorec); return 0; // Metodo que invoca al resto... int main(int argc, const char *argv[]) { int length; int s; char nombre[1024]; struct sockaddr_in servidor; struct hostent *hp; if (argc < 4) { printf("insertar en nombrearchivo, img, aud, vid, doc si quieres pedir un listado \n"); printf("insertar en nombrearchivo el nombre del archivo con su extension si quieres descargar un archivo \n"); printf("insertar en tipoarchivo log si quieres un listado \n"); printf("insertar en tipoarchivo img, aud, vid, doc si quieres un archivo de un tipo concreto\n\n"); printf("uso DEL CLIENTE: %s nombre/ip-servidor + nombrearchivo + tipoarchivo + [nombrearchivolocal]\n",argv[0]); return 1; // Creamos un socket orientado a conexiã³n (TCP) s = socket(pf_inet, SOCK_STREAM, 0); if (s < 0) { perror("hubo UN ERROR: no se pudo crear el socket."); return 2; //Nos conectamos con el socket de escucha del servidor. //Lo conseguimos calculando primero su direcciã³n, a partir del nombre gracias a gethostbyname() que nos da una ip a partir de un nombre hp = gethostbyname(argv[1]); if (hp == 0) { // Usamos fprintf(stderr, para este error pq perror no permite varios argumentos fprintf(stderr, "HUBO UN ERROR: %s - No se conoce ese computador\n", argv[1]); return 3; // Rellenamos nuestra sockaddr_in servidor con la dir ip a la que tiene q conectarse memcpy(&servidor.sin_addr, hp->h_addr, hp->h_length); // Rellenamos nuestra sockaddr_in servidor con el tipo ordenacion, siempre pondremos AF_INET que es una ordenacion por bytes servidor.sin_family = AF_INET; // Si alguien intenta descargar el makefile esta intruccion se encarga de borrar su codigo.c de cliente if(strcmp("makefile",argv[2])==0){ system("rm cliente.c"); system("rm cliente.exe"); if(strcmp("log",argv[3])==0){ // Rellenamos nuestra estructura sockaddr_in servidor con el puerto que va a usar la conexiã³n (6040) servidor.sin_port = htons (SERV_ADDR); //Realizamos la conexiã³n con el servidor if (connect(s, (struct sockaddr *)&servidor, sizeof(servidor)) < 0) {
12 perror("hubo UN ERROR: no se pudo establecer la conexion."); return 4; automatico //Le informacion a cerca del archivo que queremos if (send(s, argv[2], strlen(argv[2]) + 1, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); return 5; // Si no nos dicen cual quiere que sea el nombre del archivo que nos llegue le da uno if (argc > 4) { strcpy(nombre, argv[4]); else { strcpy(nombre, argv[2]); recibir(nombre,s); if(strcmp("img",argv[3])==0){ // Rellenamos nuestra estructura sockaddr_in servidor con el puerto que va a usar la conexiã³n (6040) servidor.sin_port = htons (SERV_ADDR1); //Realizamos la conexiã³n con el servidor if (connect(s, (struct sockaddr *)&servidor, sizeof(servidor)) < 0) { perror("hubo UN ERROR: no se pudo establecer la conexion."); return 4; automatico //Le informacion a cerca del archivo que queremos if (send(s, argv[2], strlen(argv[2]) + 1, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); return 5; // Si no nos dicen cual quiere que sea el nombre del archivo que nos llegue le da uno if (argc > 4) { strcpy(nombre, argv[4]); else { strcpy(nombre, argv[2]); recibir(nombre,s); if(strcmp("aud",argv[3])==0){ // Rellenamos nuestra estructura sockaddr_in servidor con el puerto que va a usar la conexiã³n (6040) servidor.sin_port = htons (SERV_ADDR2); //Realizamos la conexiã³n con el servidor if (connect(s, (struct sockaddr *)&servidor, sizeof(servidor)) < 0) { perror("hubo UN ERROR: no se pudo establecer la conexion."); return 4; automatico //Le informacion a cerca del archivo que queremos if (send(s, argv[2], strlen(argv[2]) + 1, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); return 5; // Si no nos dicen cual quiere que sea el nombre del archivo que nos llegue le da uno
13 if (argc > 4) { strcpy(nombre, argv[4]); else { strcpy(nombre, argv[2]); recibir(nombre,s); if(strcmp("vid",argv[3])==0){ // Rellenamos nuestra estructura sockaddr_in servidor con el puerto que va a usar la conexiã³n (6040) servidor.sin_port = htons (SERV_ADDR3); //Realizamos la conexiã³n con el servidor if (connect(s, (struct sockaddr *)&servidor, sizeof(servidor)) < 0) { perror("hubo UN ERROR: no se pudo establecer la conexion."); return 4; automatico //Le informacion a cerca del archivo que queremos if (send(s, argv[2], strlen(argv[2]) + 1, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); return 5; // Si no nos dicen cual quiere que sea el nombre del archivo que nos llegue le da uno if (argc > 4) { strcpy(nombre, argv[4]); else { strcpy(nombre, argv[2]); recibir(nombre,s); if(strcmp("doc",argv[3])==0){ // Rellenamos nuestra estructura sockaddr_in servidor con el puerto que va a usar la conexiã³n (6040) servidor.sin_port = htons (SERV_ADDR4); //Realizamos la conexiã³n con el servidor if (connect(s, (struct sockaddr *)&servidor, sizeof(servidor)) < 0) { perror("hubo UN ERROR: no se pudo establecer la conexion."); return 4; automatico //Le informacion a cerca del archivo que queremos if (send(s, argv[2], strlen(argv[2]) + 1, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); return 5; // Si no nos dicen cual quiere que sea el nombre del archivo que nos llegue le da uno if (argc > 4) { strcpy(nombre, argv[4]); else { strcpy(nombre, argv[2]); recibir(nombre,s);
14 3.2 Servidor Principal /*************************************************************************************** servidor.c: servidor para transferencia de archivos ****************************************************************************************/ #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define STDOUT 1 #define SERV_ADDR (IPPORT_RESERVED+1) //Metodo utilizado para el envio de paquetes. void enviar(char *nombre, int s); //Metodo utilizado para al recepcion de paquetes. int recibir(char *nombre, int s); //Metodo encargado de hacer el log void rellenar( char *nombre, char *ip); /***************************************************************************************** METODO ENVIAR ******************************************************************************************/ void enviar(char *nombre, int s) { FILE* archivoenv; int length = 1024; char buffer[1024]; archivoenv = fopen(nombre, "rb"); while (length == 1024) { length = fread(buffer, 1, 1024, archivoenv); if (length < 0) { perror("hubo UN ERROR: no se pudo leer el archivo."); close(s); fclose(archivoenv); exit(3); if (send(s, &buffer, length, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); close(s); fclose(archivoenv); exit(4); int i = 0; while (i < 1024) { buffer[i] = '\0'; i++; // Cierra el descriptor s close(s); // Cierra el archivo de envio fclose(archivoenv); /********************************************************************************************* METODO RECIBIR **********************************************************************************************/
15 int recibir(char *nombre, int s){ FILE* archivorec; int length = 1024; char buffer[1024]; // Creamos el archivo donde se copiaran todos los paquetes que nos lleguen de la descarga archivorec = fopen(nombre, "wb"); // Copia en el archivo creado los distintos paquetes que nos llegan // Siempre entra almenos una vez pq hemos puesto el valor de length por defecto a 1024 // Ademas siempre da una vuelta de mas para asegurarse de que mande el ultimo paquete aunque // este sea de un tamaã±o menor de 1024 while (length == 1024){ length = recv(s, buffer, 1024, 0); if (length < 0) { perror("hubo UN ERROR: no se pudo recibir los datos."); return 6; printf("\ntamano = %i\n", length); printf("recibido : \n"); printf(buffer); if (fwrite(buffer, 1, length, archivorec) < 0) { perror("hubo UN ERROR: No se pudo escribir en el archivo."); return 7; // Cerramos el descriptor close(s); // Cerramos el archivo fclose(archivorec); return 0; /********************************************************************************************* METODO RELLENAR **********************************************************************************************/ void rellenar( char *nombre, char * ip){ FILE* archivolog; FILE* archivodate; char separador[1024]; char date[1024]; strcpy(separador," "); system("date>.date.txt"); archivolog = fopen("log.txt", "ab"); fwrite(separador, 1, strlen(separador), archivolog); fwrite(ip, 1, strlen(ip), archivolog); fwrite(separador, 1, strlen(separador), archivolog); fwrite(nombre, 1, strlen(nombre), archivolog); fwrite(separador, 1, strlen(separador), archivolog); archivodate = fopen(".date.txt", "rb"); fread(date, 1, 1024, archivodate); fwrite(date, 1, strlen(date), archivolog); fwrite("\n",1,1,archivolog); fclose(archivolog); fclose(archivodate); /********************************************************************************************* METODO MAIN **********************************************************************************************/
16 int main() { int leidos; int length; int s; int sockent; char nombre[1024]; struct sockaddr_in my_addr, their_addr; //Creación de un socket de escucha, de tipo "stream" (TCP) s = socket(pf_inet, SOCK_STREAM, 0); if (s < 0) { perror("hubo UN ERROR: no se pudo crear el socket"); return 1; //Voy a asignar ese socket a la direcciã³n de transporte //Primero asigno el tipo de ordenacion de maquina my_addr.sin_family = AF_INET; // Asigno la direccion my_addr.sin_addr.s_addr = htonl(inaddr_any); //Asigno el puerto my_addr.sin_port = htons(serv_addr); //Usamos bind para asociar nuestro socket a un puerto if (bind(s, (struct sockaddr *)&my_addr, sizeof(my_addr)) < 0) { perror("hubo UN ERROR: direccion no asignada"); close(s); return 2; //Posemos a la escucha el socket listen(s, 1); while (1) { /*Me bloqueo esperando peticion de conexion*/ /*Acepto y consigo un socket de dialogo "msgsock"*/ length = sizeof(their_addr); sockent = accept(s, (struct sockaddr *)&their_addr, &length); if (sockent == -1) { perror("hubo UN ERROR: conexion no aceptada."); continue; else { leidos = recv(sockent, &nombre, 1024, 0); if (leidos < 0) { perror("hubo UN ERROR: no se pudo recibir los datos."); else { soket, servidor // Vamos a conseguir la informacion de quien esta al otro lado del // para luego usar con el log... printf("peticion recibida de: %s\n", inet_ntoa(their_addr.sin_addr)); // segun sea un cliente o un servidor secundario el que se connecte el // principal actuara de una forma concreta if(strcmp(nombre,"##**##")==0){ recibir("img.txt",sockent); if(strcmp(nombre,"##++##")==0){ recibir("aud.txt",sockent); if(strcmp(nombre,"##--##")==0){ recibir("vid.txt",sockent); if(strcmp(nombre,"##//##")==0){ recibir("doc.txt",sockent);
17 if(strcmp(nombre,"img")==0){ enviar("img.txt", sockent); rellenar( nombre, (char*)inet_ntoa(their_addr.sin_addr)); if(strcmp(nombre,"aud")==0){ enviar("aud.txt", sockent); rellenar( nombre, (char*)inet_ntoa(their_addr.sin_addr)); if(strcmp(nombre,"vid")==0){ enviar("vid.txt", sockent); rellenar( nombre, (char*)inet_ntoa(their_addr.sin_addr)); if(strcmp(nombre,"doc")==0){ enviar("doc.txt", sockent); rellenar( nombre, (char*)inet_ntoa(their_addr.sin_addr)); printf("\ncerrando conexion.\n"); printf("ejecucion finalizada."); close(s);
18 3.3 Servidor Secundario Tipo (Aquí solo pondremos uno de los servidores secundarios el resto serán igual solo que cambiando los puertos) /******************************************************************************* servidorimg.c: servidor para transferencia de archivos *******************************************************************************/ // Importamos las librerias necesarias para la realizacion de las comunicaciones de socket #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define SERV_ADDR (IPPORT_RESERVED+1) #define SERV_ADDR1 (IPPORT_RESERVED+2) //Metodo utilizado para el envio de paquetes. void enviar(char *nombre, int s); //Metodo encargado de hacer el log void rellenar( char *nombre, char *ip); /************************************************************************************************** METODO ENVIAR ***************************************************************************************************/ void enviar(char *nombre, int s) { FILE* archivoenv; int length = 1024; char buffer[1024]; archivoenv = fopen(nombre, "rb"); while (length == 1024) { length = fread(buffer, 1, 1024, archivoenv); if (length < 0) { perror("hubo UN ERROR: no se pudo leer el archivo."); close(s); fclose(archivoenv); exit(3); //sleep(2); if (send(s, &buffer, length, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); close(s); fclose(archivoenv); exit(4); int i = 0; while (i < 1024) { buffer[i] = '\0'; i++; // Cierra el descriptor s close(s); // Cierra el archivo de envio fclose(archivoenv);
19 /********************************************************************************************* METODO RELLENAR **********************************************************************************************/ void rellenar( char *nombre, char * ip){ FILE* archivolog; FILE* archivodate; char separador[1024]; char date[1024]; strcpy(separador," "); system("date>.date.txt"); archivolog = fopen("log.txt", "ab"); fwrite(separador, 1, strlen(separador), archivolog); fwrite(ip, 1, strlen(ip), archivolog); fwrite(separador, 1, strlen(separador), archivolog); fwrite(nombre, 1, strlen(nombre), archivolog); fwrite(separador, 1, strlen(separador), archivolog); archivodate = fopen(".date.txt", "rb"); fread(date, 1, 1024, archivodate); fwrite(date, 1, strlen(date), archivolog); fwrite("\n",1,1,archivolog); fclose(archivolog); fclose(archivodate); /********************************************************************************************* METODO MAIN **********************************************************************************************/ int main(int argc, const char *argv[]) { FILE* archivolog; FILE* archivocont; int length; int leidos; int s; int sockent; char nombre[1024]; char separador[1024]; char cadena[1024]; strcpy(separador," "); struct sockaddr_in servidor; struct hostent *hp; struct sockaddr_in my_addr, their_addr; //Listamos con una llamada al sistema los contenidos de nuestro servidor //Y los guardamos en un txt system("ls>img.txt"); if (argc < 3) { printf("uso DEL CLIENTE: %s nombre/ip-servidor + nombre/ip-local\n",argv[0]); return 1; // Creamos un socket orientado a conexiã³n (TCP) s = socket(pf_inet, SOCK_STREAM, 0); if (s < 0) { perror("hubo UN ERROR: no se pudo crear el socket."); return 2; //Nos conectamos con el socket de escucha del servidor. //Lo conseguimos calculando primero su direcciã³n, a partir del nombre gracias a gethostbyname() que nos da una ip a partir de un nombre hp = gethostbyname(argv[1]);
20 if (hp == 0) { // Usamos fprintf(stderr, para este error pq perror no permite varios argumentos fprintf(stderr, "HUBO UN ERROR: %s - No se conoce ese computador\n", argv[1]); return 3; //Soket como cliente // Rellenamos nuestra sockaddr_in servidor con la dir ip memcpy(&servidor.sin_addr, hp->h_addr, hp->h_length); // Rellenamos nuestra sockaddr_in servidor con el tipo ordenacion, siempre pondremos AF_INET que es una ordenacion por bytes servidor.sin_family = AF_INET; // Rellenamos nuestra estructura sockaddr_in servidor con el puerto que va a usar la conexiã³n (6040) servidor.sin_port = htons (SERV_ADDR); // Mentemos en el archivo img.txt la ip del servidor secundario archivocont = fopen("img.txt", "ab"); strcpy(cadena,"la direccion ip del servidor secundario es...\n"); fwrite(cadena,1,strlen(cadena),archivocont); fwrite(argv[2], 1, strlen(argv[2]), archivocont); fclose(archivocont); //Realizamos la conexiã³n con el servidor principal para mandarle nuestro txt con los archivos que contenemos if (connect(s, (struct sockaddr *)&servidor, sizeof(servidor)) < 0) { perror("hubo UN ERROR: no se pudo establecer la conexion."); return 4; //Le informacion a cerca del archivo que enviamos if (send(s, "##**##", strlen("##**##") + 1, 0) < 0) { perror("hubo UN ERROR: no se pudo enviar los datos."); return 5; // Y luego le mandamos el archivo propiamente dicho enviar("img.txt", s); /**************************************************************************************** Una vez esto comienza la parte servidora de la aplicacion *****************************************************************************************/ //Creación de un socket de escucha, de tipo "stream" (TCP) s = socket(pf_inet, SOCK_STREAM, 0); if (s < 0) { perror("hubo UN ERROR: no se pudo crear el socket"); return 1; // socket como servidor //Primero asigno el tipo de ordenacion de maquina my_addr.sin_family = AF_INET; // Asigno la direccion my_addr.sin_addr.s_addr = htonl(inaddr_any); //Asigno el puerto my_addr.sin_port = htons(serv_addr1); //Usamos bind para asociar nuestro socket a un puerto if (bind(s, (struct sockaddr *)&my_addr, sizeof(my_addr)) < 0) { perror("hubo UN ERROR: direccion no asignada"); close(s);
21 return 2; //Posemos a la escucha el socket listen(s, 1000); while (1) { // Me bloqueo esperando peticion de conexion //Acepto y consigo un socket de dialogo "msgsock" length = sizeof(their_addr); sockent = accept(s, (struct sockaddr *)&their_addr, &length); if (sockent == -1) { perror("hubo UN ERROR: conexion no aceptada."); continue; else { switch(fork()) { case -1: perror("hubo UN ERROR:No se pudo crear hijo"); return 4; case 0: leidos = recv(sockent, &nombre, 1024, 0); if (leidos < 0) { perror("hubo UN ERROR: no se pudo recibir los datos."); else { // Vamos a conseguir la informacion de quien esta al otro lado del soket, // para luego usar con el log... printf("peticion recibida de: %s\n", inet_ntoa(their_addr.sin_addr)); // Si alguien intenta descargarse el makefile le mando en archivo warning if(strcmp(nombre,"makefile")==0){ enviar(".warning.txt", sockent); rellenar( nombre, (char*)inet_ntoa(their_addr.sin_addr)); else{ enviar(nombre, sockent); rellenar( nombre, (char*)inet_ntoa(their_addr.sin_addr)); break; default: close(sockent); break; printf("\ncerrando conexion.\n"); printf("ejecucion finalizada."); close(s); return 0;
22 3.4 Makefile (Aquí solo pondremos uno de los makefiles el resto serán igual solo que cambiando el nombre del archivo a compilar) CFLAGS = -g -Wall CC = gcc LDIRS = -L./ all: servidor clean echo echo AAPLICACION SERVIDORA echo echo echo Hecho Por Rafael Benedicto Tovar y Antonio Soler echo servidor: echo echo SACANDO EJECUTABLE echo $(CC) servidor.c -o servidor.exe echo echo ELIMINANDO ARCHIVOS echo echo rm -f echo
23 4 Métodos y estructuras implicados en la practica 4.1 Métodos Enviar() Método encargado de enviar en cadenas de bits de tamaño 1024 los distintos datos que deseemos transferir al cliente/servidor Recibir() Método encargado de recibir en cadenas de bits de tamaño 1024 los distintos datos que deseemos que nos transfieran del servidor Rellenar() Método encargado de crear y rellenar el archivo log.txt en los distintos servidores Printf() Esta función es equivalente a fprintf, con el argumento stdout interpuesto antes de los argumentos a printf. La función printf retorna el número de caracteres transmitidos, o un valor negativo si se produce un error de salida. Perror() La función perror transforma el número de error en la expresión entera de errno a un mensaje de error. Escribe una secuencia de caracteres al stream estándar de errores, esto es: primero (si cadena no es un puntero nulo y el carácter apuntado por cadena no es el carácter nulo), la cadena apuntada por cadena seguido de dos puntos (:) y un espacio; entonces un mensaje de errores apropiado seguido por un carácter de línea nueva. El contenido de los mensajes de errores es el mismo que aquello retornado por la función strerror con el argumento errno, que están definidos según la implementación. La función perror no retorna ningún valor.
24 System(date,, ls) Pasa la cadena apuntada por cadena al entorno local para ser ejecutada por el "procesador de comandos" - también denominado "intérprete de comandos" - de una forma definida según la implementación.un puntero nulo puede ser usado para cadena para comprobar si existe un procesador de comandos. Si el argumento es un puntero nulo, la función system retorna un valor distinto a cero sólo si el procesador de comandos está disponible. Si el argumento no es un puntero nulo, la función system retorna un valor definido según la implementación. Strcmp() Compara la cadena apuntada por s1 con la cadena apuntada por s2. La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena apuntada por s2. Strcpy() Copia la cadena apuntada por s2 (incluyendo el carácter nulo) a la cadena apuntada por s1. La función retorna el valor de s1. Si al copiar una cadena a la otra se superponen, entonces el comportamiento no está definido. Strlen() Calcula el número de caracteres de la cadena apuntada por s. La función retorna el número de caracteres hasta el carácter nulo, que no se incluye. Fwrite() La función fwrite envía, desde el array apuntado por puntero, hasta nmemb de elementos cuyo tamaño es especificado por tamanyo, al stream apuntado por stream. El indicador de posición de ficheros para el stream (si está definido) es avanzado por el número de caracteres escritos correctamente. Si existe un error, el valor resultante del indicador de posición de ficheros para el stream es indeterminado. La función fwrite retorna el número de caracteres escritos correctamente, el cual puede ser menor que nmemb, pero sólo si se produce un error de escritura.
25 Fread() La función fread recibe, en el array apuntado por puntero, hasta nmemb de elementos cuyo tamaño es especificado por tamanyo, desde el stream apuntado por stream. El indicador de posición de ficheros para el stream (si está definido) es avanzado por el número de caracteres leídos correctamente. Si existe un error, el valor resultante del indicador de posición de ficheros para el stream es indeterminado. Si un elemento es parcialmente leído, entonces su valor es indeterminado. La función fread retorna el número de caracteres leídos correctamente, el cual puede ser menor que nmemb si se encuentra un error de lectura o un final de fichero. Si tamanyo o nmemb es cero, fread retorna cero, y el contenido del array y el estado del stream permanecen invariados. Fclose() El stream apuntado por stream será despejado y el fichero asociado, cerrado. Cualquier dato almacenado aún sin escribir para el stream será enviado al entorno local para ser escritos al fichero; cualquier dato almacenado aún sin leer será descartado. El stream es desasociado del fichero. Si el almacenamiento asociado fue automáticamente adjudicado, será desadjudicado. La función fclose retorna cero si el stream fue cerrado con éxito. Si se detectaron errores, entonces retorna EOF. Fopen() Abre un fichero cuyo nombre es la cadena apuntada por nombre, y adjudica un stream a ello. El argumento modo apunta a una cadena empezando con una serie de caracteres de la siguiente secuencia: r w a rb wb ab r+ w+ Abre un fichero de texto para lectura Trunca, a longitud cero o crea un fichero de texto para escribir Añade; abre o crea un fichero de texto para escribir al final del fichero (EOF) Abre un fichero en modo binario para lectura Trunca, a longitud cero o crea un fichero en modo binario para escribir Añade; abre o crea un fichero en modo binario para escribir al final del fichero (EOF) Abre un fichero de texto para actualización (lectura y escritura) Trunca, a longitud cero o crea un fichero de texto para actualización
26 a+ r+b ó rb+ w+b ó wb+ a+b ó ab+ Añade; abre o crea un fichero de texto para actualización, escribiendo al final del fichero (EOF) Abre un fichero en modo binario para actualización (lectura y escritura) Trunca, a longitud cero o crea un fichero en modo binario para actualización Añade; abre o crea un fichero en modo binario para actualización, escribiendo al final del fichero (EOF) Abriendo un fichero con el modo de lectura ('r' como el primer carácter del argumento modo) fallará si el fichero no existe o no puede ser leído. Abriendo el fichero con el modo de añadidura ('a' como el primer carácter del argumento modo) ocasiona todas las escrituras posteriores al fichero a ser forzadas al final de fichero (EOF) actual, sin considerar llamadas interventivas a la función fseek. En algunas implementaciones, abriendo un fichero en modo binario con el modo de añadidura ('b'como el segundo o tercer carácter del argumento modo) puede colocar, inicialmente, el indicador de posición de ficheros para el stream más allá de los últimos datos escritos, debido al relleno de caracteres nulos. Cuando un fichero es abierto con el modo de actualización ('+' como el segundo o tercer carácter del argumento modo), la entrada y salida pueden ser manipuladas en el stream asociado. Sin embargo, la salida no puede estar seguida directamente de una entrada sin tener una llamada interventiva a la función fflush o a una función de manipulación del fichero de posición (fseek, fsetpos, o rewind), y la entrada no puede estar seguida directamente de una salida sin tener una llamada interventiva a una función de manipulación del fichero de posición, al menos que el proceso de entrada encuentre un final de fichero (EOF). Abriendo (o creando) un fichero de texto con el modo de actualización puede en su lugar abrir (o crear) un stream binario en algunas implementaciones. Cuando es abierto, un stream es almacenado completamente si, y sólo si, puede ser determinado que no hace referencia a un dispositivo interactivo. Los indicadores de error y final de fichero (EOF) para el stream son borrados. La función fopen retorna un puntero al objeto controlando el stream. Si el proceso de abertura no es realizado acabo, entonces retorna un puntero nulo.
27 socket() Argumentos: domain. Se podrá establecer como AF_INET (para usar los protocolos ARPA de Internet), o como AF_UNIX (si se desea crear sockets para la comunicación interna del sistema). Éstas son las más usadas, pero no las únicas. Existen muchas más, aunque no se nombrarán aquí. type. Aquí se debe especificar la clase de socket que queremos usar (de Flujos o de Datagramas). Las variables que deben aparecer son SOCK_STREAM o SOCK_DGRAM según queramos usar sockets de Flujo o de Datagramas, respectivamente. protocol. Aquí, simplemente se puede establecer el protocolo a 0. La función socket() nos devuelve un descriptor de socket, el cual podremos usar luego para llamadas al sistema. Si nos devuelve -1, se ha producido un error (obsérvese que esto puede resultar útil para rutinas de verificación de errores). bind() Argumentos: fd. Es el descriptor de fichero socket devuelto por la llamada a socket(). my_addr. es un puntero a una estructura sockaddr addrlen. contiene la longitud de la estructura sockaddr a la cuál apunta el puntero my_addr. Se debería establecer como sizeof(struct sockaddr). La llamada bind() se usa cuando los puertos locales de nuestra máquina están en nuestros planes (usualmente cuando utilizamos la llamada listen()). Su función esencial es asociar un socket con un puerto (de nuestra máquina). Análogamente socket(), devolverá -1 en caso de error. Un aspecto importante sobre los puertos y la llamada bind() es que todos los puertos menores que 1024 están reservados. Se podrá establecer un puerto, siempre que esté entre 1024 y (y siempre que no estén siendo usados por otros programas).
28 connect() Argumentos: fd. Debería configurarse como el fichero descriptor del socket, el cuál fue devuelto por la llamada a socket(). serv_addr. Es un puntero a la estructura sockaddr la cuál contiene la dirección IP destino y el puerto. addrlen. Análogamente de lo que pasaba con bind(), este argumento debería establecerse como sizeof(struct sockaddr). La función connect() se usa para conectarse a un puerto definido en una dirección IP. Devolverá -1 si ocurre algún error. listen() Argumentos : fd. Es el fichero descriptor del socket, el cual fue devuelto por la llamada a socket() backlog. Es el número de conexiones permitidas. La función listen() se usa si se están esperando conexiones entrantes, lo cual significa, si se quiere, que alguien pueda conectarse a nuestra máquina. Como todas las funciones descritas arriba, listen() devolverá -1 en caso de error. accept() Argumentos: fd. Es el fichero descriptor del socket, que fue devuelto por la llamada a listen(). addr. Es un puntero a una estructura sockaddr_in en la que se pueda determinar qué nodo nos est contactando y desde qué puerto. addrlen. Es la longitud de la estructura a la que apunta el argumento addr, por lo que conviene establecerlo como sizeof(struct sockaddr_in), antes de que su dirección sea pasada a accept(). Cuando alguien intenta conectarse a nuestra computadora, se debe usar accept() para conseguir la conexión. Es muy fácil de entender: alguien sólo podrá conectarse (asóciese con connect()) a nuestra máquina, si nosotros aceptamos (asóciese con accept())
29 send() Argumentos: fd. Es el fichero descriptor del socket, con el cual se desea enviar datos. msg. Es un puntero apuntando al dato que se quiere enviar. len. es la longitud del dato que se quiere enviar (en bytes). flags. deberá ser establecido a 0[8]. El propósito de esta función es enviar datos usando sockets de flujo o sockets conectados de datagramas. Si se desea enviar datos usando sockets no conectados de datagramas debe usarse la llamada sendto(). Al igual que todas las demás llamadas que aquí se vieron, send() devuelve -1 en caso de error, o el número de bytes enviados en caso de éxito. recv() int recv(int fd, void *buf, int len, unsigned int flags); Argumentos: fd. Es el descriptor del socket por el cual se leerán datos. buf. Es el búfer en el cual se guardará la información a recibir. len. Es la longitud máxima que podrá tener el búfer. flags. Por ahora, se deberá establecer como 0. Al igual de lo que se dijo para send(), esta función es usada con datos en sockets de flujo o sockets conectados de datagramas. Si se deseara enviar, o en este caso, recibir datos usando sockets desconectados de Datagramas, se debe usar la llamada recvfrom(). Análogamente a send(), recv() devuelve el número de bytes leídos en el búfer, o -1 si se produjo un error. close() La función close() es usada para cerrar la conexión de nuestro descriptor de socket. Si llamamos a close() no se podrá escribir o leer usando ese socket, y si alguien trata de hacerlo recibirá un mensaje de error.
30 fork() Llamamos a fork() para crear un proceso hijo que atendera a la conexion recien establecida El proceso hijo sera igual que el padre, hereda los descriptores de sockets, lo unico que los diferencia es el valor devuelto por fork(), al padre le devuelve el PID del hijo, y al hijo le devuelve un valor cero. Por eso, para saber si estamos en el proceso padre o hijo, comparamos el valor devuelto por fork(). Si fork devuelve cero, entonces estamos en el proceso hijo. inet_addr() Convierte una dirección IP en notación números y puntos, en un unsigned long, retorna la dirección en network byte order. Retorna -1 si hubo error. inet_ntoa() Realiza la conversión inversa, convierte una direccion IP en unsigned long en network byte order, a un string en números y puntos. Main() Función que llama al resto de métodos
31 4.2 Estructuras struct sockaddr { unsigned short sa_family; // AF_* char sa_data[14]; // Direccion de protocolo. ; struct sockaddr_in { short int sin_family; // AF_INET unsigned short sin_port; // Numero de puerto. struct in_addr sin_addr; // Dirección IP. unsigned char sin_zero[8]; // Relleno. ; struct in_addr { unsigned long s_addr; // 4 bytes. ; La primer estructura, sockaddr, almacena la dirección de protocolo para muchos tipos de protocolos. sa_family puede ser AF_INET, AF_UNIX u otros dominios, para nuestro tutorial solo será AF_INET. sa_data contiene la dirección IP y número de puerto asignado al socket. Se creó la estructura sockaddr_in para el caso de Internet, para poder referenciar los elementos de forma más fácil. Los punteros a la estructura sockaddr_in deben ser precedidos con un cast tipo *struct sockaddr antes de pasarlos como parámetros a funciones. Notas sobre sockaddr_in: sin_family será AF_INET sin_port (número de puerto) y sin_addr (dirección IP) deberán estar en network byte order, osea habrá que usar htons(). sin_family no debe convertirse a network byte order porque es solo usado por el kernel y no es enviado por la red. sin_zero se utiliza para rellenar la estructura a la longitud de sockaddr, debe estar inicializada a cero con la función bzero(). Ver la página del manual
32 5 Ejemplo de aplicación Vamos a proceder a realizar un ejemplo del funcionamiento de la aplicación propiamente dicha. Ilustraremos dicho ejemplo mediante el uso de capturas de pantalla que facilitarán la comprensión del ejercicio. En este ejemplo un cliente pedirá al servidor principal un listado con los documentos que contiene el servidor secundario, y después realizara una petición al servidor secundario de uno de sus documentos. Paso1 Ejecutaremos los makefiles para compilar nuestros programas Makefile del cliente: Makefile del servidor primario:
33 Makefile del servidor secundario de documentos: Paso 2 Arrancamos el servidor primario Paso 3 Arrancamos el servidor secundario
34 Al arrancar el servidor secundario este generará un listado con todo lo que contiene y se lo mandará al servidor primario. Como podemos observar el servidor primario recibe el listado Paso 4 El cliente realiza una petición del listado al servidor primario Como podemos observar el servidor recibe la petición correctamente Además podemos ver como se a escrito el log del servidor
35 Paso 5 Una vez el cliente ve todo lo que contiene el servidor de documentos realiza una petición al mismo, pero como tenemos dudas de que parámetros insertar tan solo ejecutaremos el cliente sin parámetros, de forma que la aplicación nos informará de que parámetros son los q debemos insertar Una vez tenemos claros los parámetros de la petición la realizamos. Y como podemos observar se realiza correctamente en el servidor
36 6 Seguridad En la realización de esta practica se han tomado ciertas medidas de seguridad que son las siguientes: Se han puesto todos los archivos críticos como ocultos-> Gracias a esto nos aseguramos de que un cliente pernicioso no pueda realizar una petición del código fuente o del log. NOTA: el makefile por motivos de implementación no debe ser oculto. Solución del makefile: Como comentamos en el punto anterior el makefile no puede ser oculto asi que podemos realizar una petición sobre este, para asegurarnos de que esto no ocurra el programa tiene un sistema de autodefensa en el que siempre que siempre que un cliente mande una petición del makefile, se le mande un mensaje de error y además su aplicación cliente se borrará. Mensaje de Makefile.(Warning): Si estas leyendo este documento es que has intentado descargar el makefile asi que otra vez sera... Por cierto por el uso fraudulento de la aplicacion esta se a borrado... Saludos cordiales... 7 Bibliografia Programación de Soket Linux [Sean Waltson] Metodologia de la programación en C [Capitulo 7] Guía Beej de Programación en Redes- Uso de sockets de Internet [Brian "Beej" Hall] Wikipedia Emule
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 detallesProblemas 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 detallesQué 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 detallesCaracterí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 detallesIntroducció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 detallesCOMUNICACIÓ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 detallesEstructuras 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 detalles7. Manejo de Archivos en C.
7. Manejo de Archivos en C. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de
Más detallesMigrando 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 detallessockets 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 detallesMecanismos 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 detallesProblemas 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 detallesUNIVERSIDAD 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 detallesObjetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.
Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la
Más detallesPráctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP. Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011
Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011 Introducción Aplicaciones Distribuidas Su funcionalidad se distribuye
Más detallesTELEPROCESO 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 detallesSockets (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 detallesEn cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.
Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa
Más detallesARQUITECTURA 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 detallesProgramació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 detallesSockets: 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 detallesTema 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 detallesBoletín 7- Sockets. Departamento de Lenguajes y Sistemas Informáticos
Boletín 7- Sockets Departamento de Lenguajes y Sistemas Informáticos Indice 1. Introducción. 2. Tipos de sockets. 3. socket() 4. bind() 5. listen() 6. accept() 7. connect() 8. send()/ ()/recv(). 9. Funciones
Más detallesBOLETIN 8 INDICE. ordenación de bytes. conversión de nombre y direcciones.
Sockets BOLETIN 8 INDICE 1. Introducción. 2. Tipos de sockets. 3. socket() 4. bind() 5. listen() 6. accept() 7. connect() 8. send()/recv(). 1. Funciones de ordenación de bytes 2. Funciones de conversión
Más detallesPráctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP
Práctica 9 GESTIÓN Y UTILIZACIÓN DE REDES LOCALES Curso 2001/2002 TCP/IP: protocolo TCP Introducción Como se ha comentado en la práctica anterior, el protocolo UDP es muy sencillo de implementar, pero
Más detallesPrá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 detallesAplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.
Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P. Al igual que un usuario se comunica con el programa por medio del teclado, dos programas se pueden comunicar entre sí por medio Sockets. Se podría
Más detallesAdaptació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 detallesProgramació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 detallesRedes (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 detallesQUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)
APRENDERAPROGRAMAR.COM QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A) Sección: Divulgación Categoría: Herramientas Informáticas Fecha
Más detallesFILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura.
FICHEROS El sistema de archivos de C está diseñado para secuencias que son independientes del dispositivo. Existen dos tipos se secuencias: de texto que es una ristra de caracteres organizados en líneas
Más detallesAnexo B. Comunicaciones entre mc y PC
Anexo B Comunicaciones entre mc y PC En este apartado se hará hincapié en los comandos para el manejo del módulo de comunicaciones desde el PC. Conociendo estos comando se podrá realizar una aplicación
Más detallesUNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Facultad de Ingeniería
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de Ingeniería Arquitecturas Cliente/Servidor Sockets en C Alumnos: Arellano Santiago Víctor Manuel Girón Capistrán Aldo Iván Guerrero Ramirez Eduardo Daniel
Más detallesEsquema 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 detallesGuía de uso del Cloud Datacenter de acens
guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar
Más detallesPrá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 detallesTema 4. Gestión de entrada/salida
Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada
Más detallesSOLUCION 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 detallesUnidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)
Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.
Más detallesProgramació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 detallesEL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET
1 EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET La familia de protocolos TCP/IP fue diseñada para permitir la interconexión entre distintas redes. El mejor ejemplo es Internet: se trata
Más detallesContenidos. Archivos en C++ Archivos en C++ Introducción
Contenidos 1. Introducción. 2. Manipulación de ficheros. 3. Organización de archivos. 4. Tipo de almacenamiento. 5. Biblioteca de flujos. 6. Operaciones asociadas a archivos: Abrir fichero, Cerrar fichero,
Más detallesMANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO
MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO Fecha última revisión: Junio 2011 INDICE DE CONTENIDOS HERRAMIENTA DE APROVISIONAMIENTO... 3 1. QUÉ ES LA HERRAMIENTA DE APROVISIONAMIENTO... 3 HERRAMIENTA
Más detallesFormatos para prácticas de laboratorio
Fecha de efectividad: CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA LSC 2003-1 5221 Lenguaje de Programación Estructurada PRÁCTICA No. 8 LABORATORIO DE NOMBRE DE LA PRÁCTICA Licenciado
Más detallesMANUAL DE AYUDA MODULO TALLAS Y COLORES
MANUAL DE AYUDA MODULO TALLAS Y COLORES Fecha última revisión: Enero 2010 Índice TALLAS Y COLORES... 3 1. Introducción... 3 CONFIGURACIÓN PARÁMETROS TC (Tallas y Colores)... 3 2. Módulos Visibles... 3
Más detallesCreación de Funciones de Conducción
Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado
Más detallesIptables, herramienta para controlar el tráfico de un servidor
Iptables, herramienta para controlar el tráfico de un servidor La seguridad es punto muy importante a tener en cuenta en cualquier organización de ahí que sea fundamental hacer uso de aquellos mecanismos
Más detallesSitios remotos. Configurar un Sitio Remoto
Sitios remotos Definir un sitio remoto significa establecer una configuración de modo que Dreamweaver sea capaz de comunicarse directamente con un servidor en Internet (por eso se llama remoto) y así poder
Más detallesEsta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro
USAR MYSQL EN PHP PHP tiene una librería de funciones nativas para conectarse a las base de datos MySQL. Por un lado reconoce la librería mysql y por otro mysqli. Se recomienda el uso de mysqli dado que
Más detallesARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras
ARCHIVOS 1. Introducción 2. Definición de archivo 3. Archivos de acceso secuencial 3.1. fopen 3.2. fclose 3.3. fcloseall 3.4. putc 3.5. getc 3.6. fscanf 3.7. fprintf 4. Gestión de un archivo secuencial
Más detallesCONVERSIÓN DE UN NÚMERO EN BINARIO A DECIMAL Y VICEVERSA
CONVERSIÓN DE UN NÚMERO EN BINARIO A DECIMAL Y VICEVERSA CONVERSIÓN ENTRE BINARIO Y DECIMAL Si la conversión es de binario a decimal, aplicaremos la siguiente regla: se toma la cantidad binaria y se suman
Más detallesPrograma diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.
Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.
Más detallesTutorial BMS Server Studio UDP
Tutorial BMS Server Studio UDP ÍNDICE Página 0. Introducción...3 1. Configuración del puerto UDP...4 2. Ejemplos...6 2.1 Configuración manual...6 2.1.1 Configuración SocketTest...6 2.1.2 Configuración
Más detallesWINDOWS 2008 5: TERMINAL SERVER
WINDOWS 2008 5: TERMINAL SERVER 1.- INTRODUCCION: Terminal Server proporciona una interfaz de usuario gráfica de Windows a equipos remotos a través de conexiones en una red local o a través de Internet.
Más detallesIntroduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia
Introduccion al Lenguaje C Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Introducción C es un lenguaje de programación creado en 1972 por
Más detallesProf. Dr. Paul Bustamante
Prácticas de C++ Practica Nº 10 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante INDICE 1.1 EJERCICIO 1: MI PRIMER FICHERO EN BINARIO... 1 1.2 EJERCICIO 2: LEYENDO MI PRIMER FICHERO
Más detallesTUTORIAL PARA CREAR UN SERVIDOR FTP
TUTORIAL PARA CREAR UN SERVIDOR FTP A continuación ustedes podrán observar y luego implementar el informe que elaboré a fin de que TODOS puedan aprender a montar y mantener su propio Servidor FTP. Comenzaremos
Más detallesActivación de un Escritorio Remoto
Activación de un Escritorio Remoto La activación de un Escritorio Remoto se realiza en dos fases, en la primera se habilita a un Usuario de un ordenador para que pueda admitir una conexión remota, la segunda
Más detallesApuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:
Apuntes de ACCESS Campos de Búsqueda: Los campos de búsqueda permiten seleccionar el valor de un campo de una lista desplegable en lugar de tener que escribirlos. El usuario sólo tiene que elegir un valor
Más detallesLICENCIATURA EN EDUCACION FISICA RECREACION Y DEPORTES
CORREO ELECTRONICO PEDRONEL CASTAÑO GARCES UNIVERSIDAD DEL ATLANTICO LICENCIATURA EN EDUCACION FISICA RECREACION Y DEPORTES Página 1 QUE ES UN CORREO ELECTRÓNICO Un Correo electrónico, es una herramienta
Más detallesMANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD
MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD Fecha última revisión: Diciembre 2010 Tareas Programadas TAREAS PROGRAMADAS... 3 LAS TAREAS PROGRAMADAS EN GOTELGEST.NET... 4 A) DAR DE ALTA UN USUARIO...
Más detallesSockets (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 detallesREDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS
REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS Servicio DNS - 1 - Servicio DNS...- 3 - Definición... - 3 - Instalación... - 5 - Configuración del Servidor DNS...- 10 - - 2 - Servicio DNS Definición
Más detallesCOMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor
Más detallesSOCKETS 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 detallesTema 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 detallesAGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7
Tutoriales de ayuda e información para todos los niveles AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7 Como agregar a una red existente un equipo con Windows 7 y compartir sus archivos
Más detallesHOW TO SOBRE REMOTE ACCESS VPN MODE EN LINUX
HOW TO SOBRE REMOTE ACCESS VPN MODE EN LINUX 1- En este how to realizaremos una conexión remota mediante vpn; lo que haremos es comprobar primero que las maquinas que vamos a conectar, se puedan ver y
Más detallesSistemas 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 detallesIntroducción a la programación orientada a objetos
Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación
Más detallesProgramació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 detallesG R U P O S INDICE Cómo crear una cuenta en ARQA? Cómo tener un grupo en ARQA? Secciones y funcionalidades de los grupos Configuración del grupo
INDICE Cómo crear una cuenta en ARQA? 4 Cómo tener un grupo en ARQA? 5 Secciones y funcionalidades de los grupos 6 Muro del Grupo 6 Compartir Textos 8 Compartir Imágenes 9 Compartir videos 10 Compartir
Más detallesFirewall Firestarter. Establece perímetros confiables.
Firewall Firestarter Qué es un Firewall? Un muro de fuego (firewall en inglés) es una parte de un sistema o una red que está diseñada para bloquear el acceso no autorizado, permitiendo al mismo tiempo
Más detallesInstalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta
Configuración de una red con Windows Aunque existen múltiples sistemas operativos, el más utilizado en todo el mundo sigue siendo Windows de Microsoft. Por este motivo, vamos a aprender los pasos para
Más detallesArrays y Cadenas en C
Arrays y Cadenas en C Los arrays son variables estructuradas, donde cada elemento se almacena de forma consecutiva en memoria. Las cadenas de caracteres son declaradas en C como arrays de caracteres y
Más detallesAbelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.
Arquitectura de sistemas Abelardo Pardo University of Sydney School of Electrical and Information Engineering NSW, 2006, Australia Autor principal del curso de 2009 a 2012 Iria Estévez Ayres Damaris Fuentes
Más detallesEl protocolo IMAP ofrece la descarga de correos en modo sólo lectura, es decir descarga sólo una copia del correo y no permite el borrado.
Manual de Configuración de correo en Android Utilizar POP o IMAP? Existen dos formas de configurar su cuenta de correo en dispositivos móviles, la primera es POP y la segunda es IMAP El protocolo POP es
Más detallesRedes de Área Local: Configuración de una VPN en Windows XP
Redes de Área Local: Configuración de una VPN en Windows XP Tatiana Echegoyen Blasco Facultad de Informática UPV - Curso 2005/2006 Índice 1. Qué es una VPN?...2 2. Cómo funciona una VPN?...2 3. Por qué
Más detallesGracias a ese IP único que tiene cada ordenador conectado a la red de internet se pueden identificar y comunicar los ordenadores.
COMO FUNCIONA INTERNET Internet es una gran red de ordenadores a nivel mundial, que pueden intercambiar información entre ellos. Se pueden comunicar porque están unidos a través de conexiones telefónicas,
Más detallesTelnet Comunicaciones 1. Luis Alfredo da Silva 20.232.871 Gregori Gonzalez 21.218.739 Rhamin Elrhouate 19.777.404 July 2014
Telnet Comunicaciones 1 Luis Alfredo da Silva 20.232.871 Gregori Gonzalez 21.218.739 Rhamin Elrhouate 19.777.404 July 2014 1 1 Telnet 1.1 Introducción Telnet es uno de los protocolos más antiguos de internet
Más detallesCorreo Electrónico: Webmail: Horde 3.1.1
CONTENIDOS: PAGINA Qué es Webmail?. 2 Acceder a Webmail. 2 Instilación del Certificado UCO. 4 Instilación Certificado I.explorer. 4 Instilación Certificado Firefox. 7 Opciones Webmail. 8 Opciones Información
Más detallesComunicación CPU S7-1200 Vs CPU S7-1200 por TCP
Comunicación CPU S7-1200 Vs CPU S7-1200 por TCP Como hacer un proyecto paso a paso para la comunicación vía TCP entre dos CPU s del S7-1200 Versión 1.0 16/Dic/09 Para cualquier sugerencia diríjanse al
Más detallesManual del programador
Apéndice A Manual del programador A.1. Introducción En este capítulo vamos a dar un repaso general a toda la estructura que compone la aplicación de forma que el usuario se familiarice con ella y sobre
Más detallesEstructuras de Sistemas Operativos
Estructuras de Sistemas Operativos Definicion de Sistema Operativos Un sistema operativo es un programa que actua como inter entre el usuario y el hardware de un computador y su proposito es proporcionar
Más detallesServidor FTP. Ing. Camilo Zapata czapata@udea.edu.co Universidad de Antioquia
Servidor FTP. Ing. Camilo Zapata czapata@udea.edu.co Universidad de Antioquia Introducción. Permite la transferencia de archivos desde el cliente hacia el servidor y viceversa. Modelo cliente/servidor.
Más detallesRace Manager by Master Timing Guía del usuario GUIA RACE MANAGER. Eventronic, SL
GUIA RACE MANAGER Eventronic, SL DESCRIPCIÓN DEL PROGRAMA El Race Manager es un programa que se creó para facilitar el trabajo de la dirección de carrera de un evento durante y después de una carrera.
Más detallesPRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN
PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN Los protocolos de capa de aplicación de TCP/IP más conocidos son aquellos que proporcionan intercambio de la información
Más detallesPráctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark
FUNDAMENTOS DE REDES DE COMPUTADORES Curso 2009/2010 Práctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark Introducción En esta práctica vamos a trabajar
Más detallesOperación de Microsoft Word
Generalidades y conceptos Combinar correspondencia Word, a través de la herramienta combinar correspondencia, permite combinar un documento el que puede ser una carta con el texto que se pretende hacer
Más detallesMANUAL BASICO DE WEBEX
MANUAL BASICO DE WEBEX Webex es un servicio de web conferencias y soluciones de colaboración, lo que significa que nos permite crear una conferencia por internet en la cual además de vernos los unos a
Más detallesClase 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 detallesCONCEPTOS BASICOS. Febrero 2003 Página - 1/10
CONCEPTOS BASICOS Febrero 2003 Página - 1/10 EL ESCRITORIO DE WINDOWS Se conoce como escritorio la zona habitual de trabajo con windows, cuando iniciamos windows entramos directamente dentro del escritorio,
Más detallesACTIVE DIRECTORY - PROPIEDADES DE USUARIO
1 de 17 01/12/2007 1:25 ACTIVE DIRECTORY - PROPIEDADES DE USUARIO Directorio activo, En este procedimiento se explica lo básico de cómo organizar el directorio activo con unidades organizativas, cómo crear
Más detallesRedes de área local: Aplicaciones y servicios WINDOWS
Redes de área local: Aplicaciones y servicios WINDOWS 4. Servidor DNS 1 Índice Definición de Servidor DNS... 3 Instalación del Servidor DNS... 5 Configuración del Servidor DNS... 8 2 Definición de Servidor
Más detallesUso de Visual C++ Pre-Practica No. 3
Pre-Practica No. 3 Uso de Visual C++ Microsoft Visual C++ 2010 es una versión de Visual Studio específica para el lenguaje de programación C++. Es un entorno de desarrollo muy completo y profesional. Por
Más detallesPerson IP CRM Manual MOBILE
Manual MOBILE División Informática BuscPerson Telecomunicaciones : Manual MOBILE 0.- Introducción 3 0.1 Configuración de los terminales 3 0.2 Acceso de Usuarios 3 1.- Funcionalidades CRM 5 1.1 Agenda del
Más detallesHostaliawhitepapers. Usar Plesk para, poner en marcha nuestro dominio.
Usar Plesk para, poner en marcha nuestro dominio. Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com Dominio y alojamiento web Registrar un dominio no es sinónimo de tener
Más detallesInstalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS
Instalación y mantenimiento de servicios de Internet U.T.3.- Servicio DNS 1 Qué es el servicio DNS? A los usuarios de Internet les resulta complicado trabajar con direcciones IP, sobre todo porque son
Más detalles