Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement