piffy

UDP Server (C)

Aug 8th, 2015
294
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <arpa/inet.h>
  2. #include <netinet/in.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <unistd.h>
  8. #include <string.h>
  9.  
  10. #define NPACK 10
  11. #define PORT 6666
  12. #define BUFFER_SIZE 1024
  13. void on_error(char *s) { fprintf(stderr,"%s\n",s); fflush(stderr); exit(1); }
  14.  
  15. int main(int argc, char *argv[])
  16.     {
  17.       struct sockaddr_in server, client;
  18.       int s, i, slen=sizeof(client), port=PORT;
  19.       char buf[BUFFER_SIZE];
  20.  
  21.       /** Controllo linea di comando **/
  22.       if (argc >2 ) {
  23.     on_error("Uso: ./udp_server [porta]\n");
  24.         exit(1);
  25.       }
  26.       if (argc == 2) {port = atoi(argv[1]);}
  27.  
  28.       /** Creazione socket **/
  29.       if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
  30.          on_error("Non riesco a creare il socket");
  31.      
  32.       /** Impostazioni del socket del server */
  33.       memset((char *) &server, 0, sizeof(server)); /** Azzeramento **/
  34.       server.sin_family = AF_INET; /** Famiglia internet **/
  35.       server.sin_port = htons(port); /** Conversione numero **/
  36.       server.sin_addr.s_addr = htonl(INADDR_ANY); /** Accetta da qualsiasi IP **/
  37.  
  38.      /** Bind  **/
  39.      if (bind(s, (struct sockaddr *)&server, sizeof(server))==-1)
  40.          on_error("Non riesco a fare il bind");
  41.    
  42.       for (i=0; i<NPACK; i++) {
  43.         memset(buf, 0, BUFFER_SIZE);
  44.         /** Ricezione pacchetto **/
  45.         if (recvfrom(s, buf, BUFFER_SIZE, 0, (struct sockaddr *)&client, &slen)==-1)
  46.           on_error("Errore in ricezione");
  47.         printf("Pacchetto ricevuto da %s:%d\nDato: %s\n\n",
  48.            inet_ntoa(client.sin_addr), ntohs(client.sin_port), buf);
  49.       }
  50.         close(s);
  51.       return 0;
  52.     }
RAW Paste Data