Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/11/2010, 15:25
cris7ian
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
Socket UDP en C para linux???

Quien me puede hechar una mano ya que tengo unos pequeños errores, tengo que hacer un socket udp que en primera instancia este escuchando en un puerto, el puerto ya lo tengo es el 25558, luego este deberá recibir una cadena que entre en el puerto y sea guardado en un archivo txt
Tengo errores en el código, si alguien me pudiese ayudar porfa, este socket deberá ser servidor ya que estará en escucha y procederá a ser lo del guardar en archivo.txt
Les dejo el código.

Código:
/*
 * 
  */


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

#define PORT 25558 /* El puerto que sera abierto */
#define BACKLOG 2 /* El numero de conexiones permitidas */

main()
{

   int fd, fd2; /* los ficheros descriptores */
   FILE *archivo; // archivo puntero

   struct sockaddr_in server;   /* para la informacion de la direccion del servidor */
   struct sockaddr_in client;   /* para la informacion de la direccion del cliente */

   int sin_size;

   /* A continuacion llamada a socket() */
   if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
      printf("error en socket()\n");
      exit(-1);
   }

   server.sin_family = AF_INET;

   server.sin_port = htons(PORT); /* le doy el puerto =) */

   server.sin_addr.s_addr = INADDR_ANY; /* asigna IP*/

   bzero(&(server.sin_zero),8); /* escribimos ceros en el reto de la estructura */


   /* llamada a bind() */
   if(bind(fd,(struct sockaddr*)&server, sizeof(struct sockaddr))==-1) {
      printf("error en bind() \n");
      exit(-1);
   }

   if(listen(fd,BACKLOG) == -1) {  /* llamada a listen() */
      printf("error en listen()\n");
      exit(-1);
   }

   while(1) {
      sin_size=sizeof(struct sockaddr_in);    /* llamada a accept() */
      if ((fd2 = accept(fd,(struct sockaddr *)&client, &sin_size))==-1) {
         printf("error en accept()\n");
         exit(-1);
      }
      /*abrimos el archivo y lo escribimos mediante 'a' si no existe lo crea*/

      					archivo=fopen("ConexionUDP.txt", "a");
               	         /*Si no lo logramos abrir, salimos*/
      						if(archivo==NULL)
      							{
      								printf ("No se puede abrir el archivo...");
      								return 1;
      							}

      					/*Escribimos en el archivo*/
               	        fprintf(archivo, &sin_size);


               	        /*Cerramos el archivo*/
               	        fclose(archivo);
               	        return 0;

      printf("mensaje del equipo: %s\n", inet_ntoa(client.sin_addr) );
     
      close(fd2); /* cierra fd2*/

   }// fin while

}// fin main