Advertisement
xerpi

socket server

Jan 6th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.95 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>            
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8.  
  9. #define PORT 3550 /* El puerto que será abierto */
  10. #define BACKLOG 2 /* El número de conexiones permitidas */
  11.  
  12. main()
  13. {
  14.  
  15.    int fd, fd2; /* los ficheros descriptores */
  16.  
  17.    struct sockaddr_in server;
  18.    /* para la información de la dirección del servidor */
  19.  
  20.    struct sockaddr_in client;
  21.    /* para la información de la dirección del cliente */
  22.  
  23.    int sin_size;
  24.  
  25.    /* A continuación la llamada a socket() */
  26.    if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {  
  27.       printf("error en socket()\n");
  28.       exit(-1);
  29.    }
  30.  
  31.    server.sin_family = AF_INET;        
  32.  
  33.    server.sin_port = htons(PORT);
  34.    /* ¿Recuerdas a htons() de la sección "Conversiones"? =) */
  35.  
  36.    server.sin_addr.s_addr = INADDR_ANY;
  37.    /* INADDR_ANY coloca nuestra dirección IP automáticamente */
  38.  
  39.    bzero(&(server.sin_zero),8);
  40.    /* escribimos ceros en el reto de la estructura */
  41.  
  42.  
  43.    /* A continuación la llamada a bind() */
  44.    if(bind(fd,(struct sockaddr*)&server,
  45.            sizeof(struct sockaddr))==-1) {
  46.       printf("error en bind() \n");
  47.       exit(-1);
  48.    }    
  49.  
  50.    if(listen(fd,BACKLOG) == -1) {  /* llamada a listen() */
  51.       printf("error en listen()\n");
  52.       exit(-1);
  53.    }
  54.  
  55.    while(1) {
  56.       sin_size=sizeof(struct sockaddr_in);
  57.       /* A continuación la llamada a accept() */
  58.       if ((fd2 = accept(fd,(struct sockaddr *)&client,
  59.                         &sin_size))==-1) {
  60.          printf("error en accept()\n");
  61.          exit(-1);
  62.       }
  63.  
  64.       printf("Se obtuvo una conexión desde %s\n",
  65.              inet_ntoa(client.sin_addr) );
  66.       /* que mostrará la IP del cliente */
  67.  
  68.       send(fd2,"Bienvenido a mi servidor.\n",22,0);
  69.       /* que enviará el mensaje de bienvenida al cliente */
  70.  
  71.       close(fd2); /* cierra fd2 */
  72.    }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement