Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Socket UDP en C para linux???

Estas en el tema de Socket UDP en C para linux??? en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/11/2010, 15:25
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 13 años, 5 meses
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
  #2 (permalink)  
Antiguo 22/11/2010, 15:47
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Socket UDP en C para linux???

Primero que todo te hace falta recivir informacion del socket.....
y segundo te falta la cadena de formato del fprintf

Aca te explica un poco las funciones (viene con ejemplo):

http://lucas.hispalinux.es/Tutoriale...g-sockets.html
  #3 (permalink)  
Antiguo 22/11/2010, 18:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Socket UDP en C para linux???

siii si ese es mi drama nose como se recibe la cadena para luego ser guardada, como ves tengo el código para crear el archivo y guardarlo pero nose como se hace para poder tomarlo creo que hay una función que se llama reciv pero por mas que leo no lo logro entender.
  #4 (permalink)  
Antiguo 29/11/2010, 07:14
 
Fecha de Ingreso: noviembre-2010
Mensajes: 9
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Socket UDP en C para linux???

parece que nadie me puede ayudar???
  #5 (permalink)  
Antiguo 29/11/2010, 12:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Socket UDP en C para linux???

Tenes que hacer read del fd2, esa es la forma mas basica para procesarlo.
  #6 (permalink)  
Antiguo 14/05/2013, 08:59
 
Fecha de Ingreso: mayo-2013
Mensajes: 1
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Socket UDP en C para linux???

Hola

Lo primero que noto y se me hace raro que nadie te lo haya indicado es que estas declarando sockets TCP al poner SOCK_STREAM, para usar UDP tienes que usar como tipo SOCK_DGRAM.

Etiquetas: linux, socket, udp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:46.