/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Aplicación cliente-servidor en C con protocolo UDP

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
starsky



Registrado: 07 Jun 2006
Mensajes: 9

MensajePublicado: 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

MensajePublicado: 09/11/2006 8:26 am
Título:

¿Windows o Linux?



Salu2 Wink
Volver arriba
starsky



Registrado: 07 Jun 2006
Mensajes: 9

MensajePublicado: 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! Crying or Very sad 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

MensajePublicado: 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 Wink
Volver arriba
starsky



Registrado: 07 Jun 2006
Mensajes: 9

MensajePublicado: 09/11/2006 9:17 am
Título:

Es que me han dicho que eran sys/types y sys/socket...no se que hacer... Embarassed Crying or Very sad Confused Rolling Eyes
Volver arriba
tonilope



Registrado: 16 Oct 2005
Mensajes: 249

MensajePublicado: 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 Wink

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

MensajePublicado: 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

MensajePublicado: 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 Wink
Volver arriba
starsky



Registrado: 07 Jun 2006
Mensajes: 9

MensajePublicado: 09/11/2006 9:50 am
Título:

Muchas gracias tonilope.

Te iré comentando mis dudas.

GRACIAS!

Starsky Laughing
Volver arriba
tonilope



Registrado: 16 Oct 2005
Mensajes: 249

MensajePublicado: 09/11/2006 10:02 am
Título:

Se me olvidó comentarte que si optas finalmente por Windows le eches un vistazo a la web de los que más saben de Winsock -> http://msdn.microsoft.com/library/en-us/winsock/winsock/getting_started_with_winsock.asp

Salu2 Wink
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com