| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
starsky
Registrado: 07 Jun 2006 Mensajes: 9
| Publicado: 09/11/2006 8:05 am | | | Título: Aplicación cliente-servidor en C con protocolo UDP |
| Hola a todos.
Tengo un problema. Estoy haciendo una aplicacion cliente-servidor usando el protocolo UDP. He visto en muchos sitios que se incluyen las librerías <sys/socket.h> y otras pero al compilar no las reconoce y me estoy volviendo loco.
Se que es mucho pedir, pero si sabeis si hay alguna aplicacion muy basica de cliente-servidor que use UDP (con SOCK_DGRAM etc..) por favor decidme donde puedo encontrarla.
Muchas gracias de antemano a todos.
Starsky. |
|
| Volver arriba | |
 |
tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 09/11/2006 8:26 am | | | Título: |
| ¿Windows o Linux?
Salu2  |
|
| Volver arriba | |
 |
starsky
Registrado: 07 Jun 2006 Mensajes: 9
| Publicado: 09/11/2006 8:52 am | | | Título: |
| Muchas gracias Tonylope!
Es para windows. Lo unico es que ese tutorial ya lo he leido. Yo creo que me he recorrido la red entera! pero ese me parece un poco complicado.
La verdad (no se si hacer esto) es que lo que me han pedido es lo siguiente, pero no tengo la más remota idea de cómo hacerlo. Puede que ni me contesteis, pero bueno, allá va:
1. Objetivo
El objetivo de esta práctica es: ? Utilizar UDP como protocolo de comunicación entre aplicaciones en nodos diferentes ? Utilizar las funciones necesarias para poder establecer la comunicación entre nodos de una red, controlando el flujo de paquetes o mensajes y los errores que se produzcan.
2. Funciones y otros aspectos de programación
Hay algunas estructuras que es necesario usar: sockaddr, sockaddr_in y in_addr. Para utilizar sockets en C es necesario usar las siguientes funciones: ? int socket(int domain, int type, int protocol):devuelve un descriptor de socket. ? int bind(int fd, struct sockaddr *my_addr, int addrlen): asociar un socket con un puerto (del ordenador donde se ejecuta). ? int recvfrom(int fd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen): devuelve el número de bytes recibidos ? close(fd): cierra la conexión con el descriptor de socket ? int gethostname(char *hostname, size_t size): obtiene el nombre de la máquina local
Las librerías a incluir son: ? #include <sys/types.h> ? #include <sys/socket.h>
3. Planteamiento de la práctica La práctica consiste en el desarrollo de dos programas que se ejecutarán en nodos u ordenadores diferentes dentro de una red. Estos programas deberán abrir sockets UDP en cada ordenador de manera que, uno será el “maestro” (debe ser el primero que se ejecute), y otro el “esclavo”. Dado que se va a utilizar UDP, para cualquier paquete o mensaje que envíe cualquiera de los programas, el que envía debe recibir la confirmación de su correcta recepción (acuse de recibo). En caso de no recibir dicha confirmación en 30 segundos, el remitente volverá a enviar el mismo mensaje hasta que reciba la confirmación correspondiente. La confirmación sólo será necesaria para los mensajes de datos, no para los de confirmación, pudiendo darse el caso de que el destinatario de la confirmación no lo recibiera y, creyendo que no llegó al destino, volviese a enviar el mensaje original, por lo que será necesario controlar la recepción de mensajes duplicados y desecharlos. La confirmación debe ir referida al mensaje que se confirme. Para el desarrollo de este protocolo el alumno tiene total libertad, debiendo asegurar la transmisión y recepción correcta sin pérdidas ni duplicación de mensajes. o El maestro se ejecutará en un ordenador y en el otro ordenador se podrán ejecutar varios programas esclavos, con la siguiente secuencia de acciones: o El maestro se inicia primero, muestra por pantalla la dirección y puerto, y pide por pantalla el número de esclavos que se van a conectar. o Después se ejecutan los esclavos, que enviarán al padre un mensaje diciendo que están activos. o Cada mensaje que recibe el maestro lo confirma al esclavo, y muestra por pantalla el proceso que se ha activado y su dirección y puerto. o Una vez recibidos los mensajes de todos los procesos, el maestro envía un único mensaje por multicast indicando la finalización de la prueba, que recibirán los esclavos y que escribirán por pantalla que han recibido la orden de terminación. A este mensaje no responderán los esclavos confirmándolo, simplemente terminarán su ejecución.
MUCHAS GRACIAS DE ANTEMANO
Starsky |
|
| Volver arriba | |
 |
|
tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 09/11/2006 9:09 am | | | Título: |
| Creo que tienes un pequeño lío.
En entornos Unix:
| Código: | #include <sys/types.h> #include <sys/socket.h>
|
En Windows:
| Código: | #include <winsock2.h> //Además "linkar" la librería libws2_32.a
|
http://tangentsoft.net/wskfaq/
Salu2  |
|
| Volver arriba | |
 |
starsky
Registrado: 07 Jun 2006 Mensajes: 9
| Publicado: 09/11/2006 9:17 am | | | Título: |
| Es que me han dicho que eran sys/types y sys/socket...no se que hacer...  |
|
| Volver arriba | |
 |
tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 09/11/2006 9:35 am | | | Título: |
| A ver. Si te han dicho eso es porque quieren que la práctica sea para entorno Unix (Linux o similares). Si tu SO es Windows, mi consejo es que te bajes una distribución de Linux LiveCD como por ejemplo Knoppix y sigas el tutorial de sockets en Linux (al principio puede resultarte un poco lioso pero es normal).
Si te surgen dudas pregunta.
Salu2 
PD: Los conceptos son los mismos tanto en Windows como en Linux. Lo que cambian son algunos nombres de funciones, includes, etc... y que en Windows hay que escribir más código para hacer lo mismo.
Ultima edición por tonilope el 09/11/2006 9:41 am; editado 1 vez |
|
| Volver arriba | |
 |
|
starsky
Registrado: 07 Jun 2006 Mensajes: 9
| Publicado: 09/11/2006 9:39 am | | | Título: |
| Pues la verdad, me resulta muy raro ya que el profesor no ha comentado absolutamente nada de linux. Es más, dijo que no lo hicieramos en ese entorno porque el lo iba a corregir bajo un S.O. Windows...
Muchas gracias de todas formas.
Iré preguntando todas las dudas que tenga, de acuerdo?
Os lo agradezco muchísimo.
Starsky |
|
| Volver arriba | |
 |
tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 09/11/2006 9:45 am | | | Título: |
| Entonces es posible que sea un despiste de tu profesor a la hora de daros el enunciado. En ese caso, vete leyendo el FAQ de Windows y en la próxima clase le pides que te lo aclare. Mi consejo es que empieces por el principio para entenderlo todo bien, antes de saltar a SOCKET UDP.
Salu2  |
|
| Volver arriba | |
 |
starsky
Registrado: 07 Jun 2006 Mensajes: 9
| Publicado: 09/11/2006 9:50 am | | | Título: |
| Muchas gracias tonilope.
Te iré comentando mis dudas.
GRACIAS!
Starsky  |
|
| Volver arriba | |
 |
|
tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| |
| Volver arriba | |
 |
|
|