Laboratorio de Redes(4º) Curso 2004/05 Práctica 4ª Programación Cliente (y servidor) Eco (UDP) En esta práctica vamos estudiar la programación de Socket que realiza un cliente y servidor del protocolo ECO (versión UDP). Objetivos: Manejar básico de sockets. Comprender la programación de la arquitectura Cliente-Servidor. Documentación: La documentación para esta práctica es muy abundante en Internet como por ejemplo: “Beej's Guide to Network Programming, Using Internet Sockets” http://www.ecst.csuchico.edu/~beej/guide/net/ También en el propio: man 2 socket y siguientes. Como texto de introducción vamos a seguir: Donahoo, “The Pocket Guide of TCP/IP Sockets- C version” Ed. Morgan Kaufmann A título informativo hay versiones para java y windows. La versión java esta en: http://java.sun.com/docs/books/tutorial/networking/index.html. Nociones de teoría: Los protocolos de transporte en Internet son: TCP y UDP. El primero orientado a conexión y el segundo sin conexión. Para enviar datos a una máquina, hay que identificarla mediante su dirección IP, ya sea en el formato punteado (Ej. 161.67.27.132) o por su nombre (Ej. arco.inf-cr.uclm.es). El nombre sirve de nemónico para recordarlo fácilmente, pero es preciso que el programa obtenga la traducción de nombre a dirección IP. Además, hay que identificar qué aplicación debe tratar los datos, esto se realiza con los puertos. De los 64K puertos existentes para TCP y otros tantos para UDP, los primeros 1024 están reservados para aplicaciones muy concretas, son los puertos “Well-Know” o conocidos. Así el puerto 7 de UDP y el 7 de TCP se reservan para el protocolo ECO (echo). Protocolo ECO (echo). El protocolo ECO (RFC 862) devuelve, como vimos en la práctica anterior, los datos que le han sido enviados. Este protocolo puede utilizarse para verificar la conexión o verificar aplicaciones. 1 Laboratorio de Redes(4º) Curso 2004/05 Práctica 4ª En el caso del TCP, el cliente establece una conexión y envía los datos al servidor, el servidor, por su parte, los datos que recibe los envía de vuelta al cliente. El proceso continúa hasta que el cliente cierra la conexión. En el caso del UDP, no hay proceso de conexión, ni de desconexión. El servidor devuelve cada datagrama al cliente que lo envió. Veamos un ejemplo de la parte cliente de Eco en los ficheros: (http://cs.baylor.edu/~donahoo/PocketSocket/textcode.html) • UDPEchoClient.c • DieWithError.c 1. Compilese y ejecútese Esta versión no permite la resolución de nombres por lo que la máquina destino se referencia en formato decimal punteado. 2. Modifíquese el programa para que transmita en modo terminal líneas de texto con eco local o sin él. El programa mantendrá la conexión hasta que se introduzca en una línea: exit Veamos ahora un ejemplo de la parte del servidor de Eco en los ficheros: • UDPEchoServer.c • DieWithError.c La diferencia practica de este programa es que espera la llegada de conexiones sucesivas y tras la desconexión queda a la espera de la siguiente conexión. 3. Compílese y ejecútese. Usualmente los puertos well-know, como el de Echo están reservados al root. 4. Modifíquese para que cuente las líneas y las envíe dentro del eco. N.B. 127.0.0.1 suele ser la dirección IP de bucle en el nivel de red. Ver ifconfig. Permite que todo lo que se envíe a esa dirección sea recibido por sí mismo independientemente de la dirección asociada al interfaz. El nemónico es localhost. 2