Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/11/2010, 17:20
Trovaz
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 9
Respuesta: Tomar cadena automatica

Cita:
Iniciado por cris7ian Ver Mensaje
este es mi código. lo que deseo es que escriba en el archivo.txt la cadena que recibe del puerto, pero automático (este es el socket de servidor nomas porque pq mi puerto esta abierto ese sera mi cliente, este es el que queda escuchando al puerto)
que tengo mal




Código:
/*
 * ConectorUDP.c
 *
 */


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.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; // 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 continuaci�n la 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


*En primera el socket que estas creando es para una conexion TCP, no UDP. si necesitas una conexion UDP cambia la macro SOCK_STREAM por SOCK_DGRAM
*Tu fprintf esta mal, le estas pasando un int en lugar de un const char *format.
*En ningun momento estas leyendo informacion de tu socket
*Te falta incluir la libreria strings.h para poder hacer uso de la funcion bzero


En fin, leete un buen manual de sockets. Para leer informacion de un socket existen las funciones recv y read. Informate un poquito mas y si te van saliendo dudas concretas hasmelas saber.

Bienvenido a la programacion de sockets :E

Saludos++