Thursday, October 29, 2015

Sockets - Server Code: udp_server.c

/* Creates a datagram server.  The port
   number is passed as an argument.  This
   server runs forever */

#include <sys/types.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <netdb.h>
#include <stdio.h>



void
error (
    const char* msg
) {
    perror(msg);
    exit(0);
}

const    int    BUF_SIZE    = 1024;


int
main (
    int        argc,
    char*    argv[]
) {
   int                    sock;
   int                    length;
   int                    n;
   socklen_t            fromlen;
   struct sockaddr_in    server;
   struct sockaddr_in    from;
   char                    buf[BUF_SIZE];

   if (argc != 2)    error("ERROR, no port provided\n");
  
   sock        = socket(AF_INET, SOCK_DGRAM, 0);
   if (sock < 0) error("Opening socket");

   length    = sizeof(server);
   bzero(&server, length);
   server.sin_family        = AF_INET;
   server.sin_addr.s_addr    = INADDR_ANY;
   server.sin_port            = htons(atoi(argv[1]));

   if (bind(sock,(struct sockaddr *)&server,length) < 0) error("binding");
   fromlen    = sizeof(struct sockaddr_in);
   for (;;) {
       n    = recvfrom(sock, buf, BUF_SIZE, 0, (struct sockaddr *)&from, &fromlen);
       if (n < 0) error("recvfrom");
       printf("Received a datagram: ");
       printf("%s\n", buf);
       n    = sendto(sock,"Got your message\n", 17, 0, (struct sockaddr *)&from, fromlen);
       if (n < 0) error("sendto");
   }
 }

No comments:

Post a Comment