/**Copyright (c) 2015 Mathias Buus, Marcello Missiroli & Remy Lebeau */ #include #include #include #define BUFFER_SIZE 1024 #define NPACK 10 void on_error(char *s, int *errCode = NULL) { int err = (errCode) ? *errCode : WSAGetLastError(); fprintf(stderr, "%s: %d\n", s, err); fflush(stderr); WSACleanup(); exit(1); } int main(int argc, char *argv[]) { WSADATA wsadata; struct sockaddr_in server, client; int s, i, slen=sizeof(client), port=6666, err; char buf[BUFFER_SIZE]; /** Controllo linea di comando **/ if (argc >2 ) { on_error("Uso: ./udp_server [porta]\n"); exit(1); } if (argc == 2) {port = atoi(argv[1]);} /** Inizializzazione Winsock **/ err = WSAStartup(MAKEWORD(2,2), &wsadata); if (err != 0) on_error("Errore in WSAStartup", &err); /** Creazione socket **/ if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) on_error("Non riesco a creare il socket"); /** Impostazioni del socket del server */ memset((char *) &server, 0, sizeof(server)); /** Azzeramento **/ server.sin_family = AF_INET; /** Famiglia internet **/ server.sin_port = htons(port); /** Conversione numero **/ server.sin_addr.s_addr = htonl(INADDR_ANY); /** Accetta da qualsiasi IP **/ /** Bind **/ if (bind(s, (struct sockaddr *)&server, sizeof(server))==-1) on_error("Non riesco a fare il bind"); else printf("In ascolto sulla porta %d\n",port); for (i=0; i