server.c
资源名称:ixp425BSP.rar [点击查看]
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:3k
源码类别:
VxWorks
开发平台:
C/C++
- /* server.c - server process for simple client/server network demo */
- static char *copyright = "Copyright 1986-1989, Wind River Systems, Inc.";
- /*
- modification history
- --------------------
- 01i,31oct91,rrr passed through the ansification filter
- -changed copyright notice
- 01h,25oct90,lpf put back the HP version's bcopy.
- 01g,07jun89,gae used ntohs on SERVER_NUM; changed SOCKADDR to struct sockaddr.
- 01c,06apr87,gae caught some lint. Got rid of excess includes.
- 01b,12jan87,jlf minor rearrangement, to meet WRS coding conventions.
- changed <> to " in includes.
- 01a,17sep86,llk written.
- */
- /*
- DESCRIPTION
- This is a simple demonstration of the server-client relationship.
- This is the server. The other half of the demonstration is in client.c
- */
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include "serverDemo.h"
- #if defined(HOST_HP)
- void bzero (s, n)
- char *s;
- int n;
- {
- memset (s, ' ', n);
- }
- #endif
- /*******************************************************************************
- *
- * main - server process
- *
- * This is a simple server program which communicates with a client
- * through a socket. It reads (recv's) characters, one at a time,
- * from the client and echos them to standard output. When the client
- * goes away, the server also goes away (the server reads 0 characters
- * from the socket).
- *
- * The server runs on UNIX, client runs on VxWorks.
- *
- * See the manual page on sockets for more information.
- */
- main ()
- {
- int sock, snew; /* socket fd's */
- struct sockaddr_in serverAddr; /* server's address */
- struct sockaddr_in clientAddr; /* client's address */
- int client_len; /* length of clientAddr */
- char c;
- extern int errno; /* for UNIX error referencing */
- /* Zero out the sock_addr structures.
- * This MUST be done before the socket calls.
- */
- bzero (&serverAddr, sizeof (serverAddr));
- bzero (&clientAddr, sizeof (clientAddr));
- /* Open the socket.
- * Use ARPA Internet address format and stream sockets.
- * Format described in "socket.h".
- */
- sock = socket (AF_INET, SOCK_STREAM, 0);
- if (sock == -1)
- exit (1);
- /* Set up our internet address, and bind it so the client can connect. */
- serverAddr.sin_family = AF_INET;
- serverAddr.sin_port = htons(SERVER_NUM);
- printf ("nBinding SERVERn", serverAddr.sin_port);
- if (bind (sock, (struct sockaddr *)&serverAddr, sizeof (serverAddr))
- == -1)
- {
- printf ("bind failed, errno = %dn", errno);
- close (sock);
- exit (1);
- }
- /* Listen, for the client to connect to us. */
- printf ("Listening to clientn");
- if (listen (sock, 2) == -1)
- {
- printf ("listen failedn");
- close (sock);
- exit (1);
- }
- /* The client has connected. Accept, and receive chars */
- printf ("Accepting CLIENTn");
- client_len = sizeof (clientAddr);
- snew = accept (sock, (struct sockaddr *)&clientAddr, &client_len);
- if (snew == -1)
- {
- printf ("accept failedn");
- close (sock);
- exit (1);
- }
- printf ("CLIENT: port = %d: family = %d: addr = %lx:n",
- ntohs(clientAddr.sin_port), clientAddr.sin_family,
- ntohl(clientAddr.sin_addr.s_addr));
- /* repeatedly recieve characters from client and put on stdout */
- for (;;)
- {
- if (recv (snew, &c, 1, 0) == 0)
- {
- /* client has disappeared */
- break;
- }
- putchar (c);
- }
- /* close the socket from the UNIX side */
- close (sock);
- close (snew);
- printf ("n...goodbyen");
- }