/**Copyright (c) 2015 Mathias Buus, Marcello Missiroli & Remy Lebeau */
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#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<NPACK; i++) {
memset(buf, 0, BUFFER_SIZE);
/** Ricezione pacchetto **/
if (recvfrom(s, buf, BUFFER_SIZE, 0, (struct sockaddr *)&client, &slen)==-1)
on_error("Errore in ricezione");
printf("Pacchetto ricevuto da %s:%d\nDato: %s\n\n",
inet_ntoa(client.sin_addr), ntohs(client.sin_port), buf);
}
WSACleanup();
closesocket(s);
return 0;
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎