www.pudn.com > vxWorks_Lab.rar > unixServer.c
/* unixServer - reads client requests and sends a reply. */ /* Copyright 1984-1994 Wind River Systems, Inc. */ /* modification history -------------------- 01c,06apr98,dlk removed free (pClientInet). 01b,05dec94,bss cleaned up. WRS coding conventions enforced. 01a,???????,??? written. */ /* DESCRIPTION */ /* includes */ #include#include #include #include #include /* defines */ #define MAX_MSG_LEN 80 #define FOREVER for (;;) /* for WRS coding conventions */ #define LOCAL static /* typedefs */ typedef int SOCK_FD; /* forward declarations */ LOCAL void error (); /******************************************************************************* * * main - entry point to unixServer * * This routine sets up a UDP socket and then sits in an infinite * loop reading client messages, printing them to the console, and * sending a reply. */ main (argc, argv) int argc; char ** argv; { short port; int clientAddrLength; SOCK_FD sockFd; struct sockaddr_in clientAddr; struct sockaddr_in srvAddr; char buf [MAX_MSG_LEN]; char * reply = "Here is your reply\n"; u_short clientPort; char * pClientInet; clientAddrLength = sizeof (clientAddr); /* Get the server port number */ if (argc != 2) { fprintf (stderr, "Usage: %s portNumber\n", argv[0]); exit (1); } port = (short) atoi (argv [1]); /* Create a socket */ if ((sockFd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) error ("Socket failed"); /* * Bind to a well known address. INADDR_ANY says any network * interface will do. hton?() routines put things in network * byte order */ bzero ((char *) &srvAddr, sizeof (srvAddr)); srvAddr.sin_family = AF_INET; srvAddr.sin_port = htons(port); srvAddr.sin_addr.s_addr = INADDR_ANY; if (bind (sockFd, &srvAddr, sizeof(srvAddr)) < 0) { close (sockFd); error ("Bind failed"); } FOREVER { if (recvfrom (sockFd, buf, MAX_MSG_LEN, 0, &clientAddr, &clientAddrLength) < 0) { close (sockFd); error ("recvfrom failed"); } clientPort = ntohs (clientAddr.sin_port); pClientInet = inet_ntoa (clientAddr.sin_addr); printf ("Message received from client (port = %d, inet = %s):\n", clientPort, pClientInet); printf ("%s\n", buf); if (sendto (sockFd, reply, strlen(reply) + 1, 0, &clientAddr, clientAddrLength) < 0) { close (sockFd); error ("sendto failed"); } } } /******************************************************************************* * * error - aborts a process on an error * * This funcion displays the reason a process crashed * and terminates that process. */ LOCAL void error (pStr) char * pStr; { perror (pStr); exit (1); }