ICS153

Sample Server Program

 

/* ===================================================================

* Server.c : ICS 153 Server Program

* Author : Chris Davison

* =================================================================== */

#include <stdio.h>

#include <sys/time.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <sys/signal.h>

 

#include <assert.h>

#include <string.h>

#include <unistd.h>

#include <fcntl.h>

#include <math.h>

 

#include <netdb.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <arpa/inet.h>

 

typedef struct sockaddr *SAP ; /* Socket Address Pointer */

 

#define SERVICE_PORT 1153

#define BUFSIZE 1024 /* static constant */

 

int main(int argc, char *argv[]) {

 

 

char buffer[BUFSIZE] ; /* temporary buffer */

int serv_sockd ; /* server socket descriptor */

int retval ; /* temporary return value */

int on = 1 ; /* Value to on in setsockopt */

struct sockaddr_in serv_addr ; /* server address */

FILE *fp ; /* Output file pointer */

int numrcvd ; /* Number of bytes rcvd on a socket */

/* ------------------------------------------------------

* Creat a socket descriptor

* ------------------------------------------------------ */

 

serv_sockd = socket(PF_INET, SOCK_DGRAM, 0) ;

if ( serv_sockd < 0 ) {

perror("SOCKET") ;

exit(1) ;

}

 

/* ------------------------------------------------------

* Set up socket to reuse address

* ------------------------------------------------------ */

retval = setsockopt(serv_sockd,SOL_SOCKET,SO_REUSEADDR,(char*)&on,sizeof(on));

 

if ( retval < 0 ) {

perror("SETSOCKOPT") ;

exit(1) ;

}

 

/* --------------------------------------------------------

* setup the local server address that I want to list to

* ------------------------------------------------------ */

 

memset( (char *)&serv_addr, 0, sizeof(serv_addr) ) ;

 

 

serv_addr.sin_family = AF_INET ;

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;

serv_addr.sin_port = htons((u_short)SERVICE_PORT) ;

 

/* ------------------------------------------------------

* Bind to the socket on the local host

* ------------------------------------------------------ */

 

retval = bind(serv_sockd,(SAP) &serv_addr, sizeof(serv_addr)) ;

if ( retval < 0 ) {

perror("BIND") ;

exit(1) ;

}

 

/* ------------------------------------------------------

* << Run the server in a while loop. >>

* ------------------------------------------------------ */

 

while (retval == 0)

{

/* Receive some data */

numrcvd= recv(serv_sockd,buffer,BUFSIZE,0) ;

 

/* Display the data to the screen */

printf("\nGot %s", buffer) ;

printf("\n");

/* Open the homework file and write the data */

fp = fopen("ics153SP99", "a") ;

retval = fprintf(fp, buffer) ;

if (retval < 0)

break ;

retval = fprintf(fp, "\n") ;

retval = fclose(fp) ;

}

printf("Bad retval in while \n");

printf("This crashed me: %s", buffer);

exit(0) ;

}