.

Temas relacionados con la programación de aplicaciones que funcionan sobre un servidor.
Responder
Mensaje
Autor
cris7ian
Mensajes: 19
Registrado: 19/11/2010 12:47 pm

.

#1 Mensaje por cris7ian » 22/11/2010 5:22 am

ejemplo de socket
Última edición por cris7ian el 14/12/2010 11:26 am, editado 2 veces en total.

cris7ian
Mensajes: 19
Registrado: 19/11/2010 12:47 pm

#2 Mensaje por cris7ian » 22/11/2010 10:41 am

Última edición por cris7ian el 14/12/2010 7:51 am, editado 1 vez en total.

Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

#3 Mensaje por rir3760 » 23/11/2010 5:00 pm

Como te comente en otro tema deberias dejar el desarrollo de programas "avanzados" (como el caso de un servidor) para despues, una vez manejes con soltura el lenguaje C.

Sin entrar en el tema de sockets en el programa hay varios errores. Tambien deberias evitar documentar el lenguaje con comentarios como "// fin main" ya que el objetivo de estos es indicar la intencion del programador (y no las reglas del lenguaje).

Un error importante que puede causar que el programa reviente es esta llamada a fprintf:

Código: Seleccionar todo

fprintf(archivo, &sin_size);
Ya que el segundo argumento de la funcion debe ser la direccion donde se localiza la cadena de formato (usualmente utilizando una cadena literal).

Otro detalle problematico es esta sentencia:

Código: Seleccionar todo

bzero(&(server.sin_zero), 8); /* escribimos ceros en el reto de la estructura */
Solo funciona si tienes la documentacion indicando el orden de los campos, es mejor (por sencillo) utilizar simplemente en la declaracion:

Código: Seleccionar todo

struct sockaddr_in server = {0};
Una deficiencia son las salidas del programa en caso de error, no es necesario utilizar la funcion "exit", basta con utilizar la palabra reservada "return" indicando el valor de retorno de la funcion (y el programa), por ejemplo:

Código: Seleccionar todo

return EXIT_FAILURE;
Tambien tienes sentencias que no se ejecutaran ya que estan colocadas despues de la sentencia de salida "return 0;":

Código: Seleccionar todo

return 0; /* <== Aqui termina el programa */

/* El resto no se ejecuta */
printf("mensaje del equipo: %s\n", inet_ntoa(client.sin_addr) );
close(fd2); /* cierra fd2*/
Sin temor a repetir: primero domina el lenguaje y solo despues entra en temas como este.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

linkstudios
Mensajes: 16
Registrado: 04/12/2010 4:30 am

#4 Mensaje por linkstudios » 07/12/2010 3:20 am

cris7ian escribió:mediante esta web me oriente un poco pero sigo medio perdidooo!!
ahi les dejo el manual para que me hechen una manito

http://www.chuidiang.com/clinux/sockets/udp/udp.php
Anda es la misma que encontre yo y me propuse leer!
Oy tengo tiempo cristian, me mirare toda la información que tengo y probaré haver si consigo hacer algo, si eso despues te aviso y lo comentamos.

Suerte!
LinkStudios

cris7ian
Mensajes: 19
Registrado: 19/11/2010 12:47 pm

#5 Mensaje por cris7ian » 07/12/2010 5:42 am

dale

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados