⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testserver.c

📁 Vxworks的培训教程,大家分享下啊,
💻 C
字号:
/* testServer - prints a client's messages and sends user-specified replies *//* Copyright 1984-1993 Wind River Systems, Inc. *//*modification history--------------------01b,06dec94,bss  cleaned up.01a,???????,???  written.*//*DESCRIPTIONtestServer sets up a TCP socket and then  processes a client's requests sequentially.  When a client requests service, testServer will printthe message sent by the client, prompt the user for a reply to send, and then send the reply.  testServer will continue servicing the client until it is done.  Then testServer will exit.  Typically,a server would sit in an infinite loop processing requests from multiple clients.*/#include <stdio.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>/* defines */#define MAX_MSG_SIZE 80#define FOREVER	for (;;)	/* for WRS coding conventions */#define LOCAL	static/* typedefs */typedef int SOCK_FD;/* forward declarations */LOCAL void doRequest ();LOCAL void error ();/******************************************************************************* * * main - entry point of testServer * * This routine sets up a TCP socket and then sits in an infinite * loop accepting clients' requests.  When a request is made, * doRequest () is called to process the request. */main (argc, argv)	int argc;	char **argv;	{	u_short				port;	int					clientAddrLength;	SOCK_FD				sockFd;	SOCK_FD				newSockFd;	struct sockaddr_in	clientAddr;	struct sockaddr_in	srvAddr;	clientAddrLength = sizeof (clientAddr);	/* Get the server port number */	if (argc != 2)		{		fprintf (stderr, "Usage: %s portNumber\n", argv[0]);		exit (1);		}	port = (u_short) atoi(argv[1]);	/* Create a socket */	if ( (sockFd = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 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");		}	/* Queue only one request */	if (listen (sockFd, 1) < 0)		{		close (sockFd);		error ("Listen failed");		}	/* 	 * Service request. Typically, the server would be in an infinite loop,	 * granting requests to many clients. In this example, we service just	 * a single client and then exit.	 */	FOREVER		{		newSockFd = accept (sockFd, &clientAddr, &clientAddrLength);		if (newSockFd < 0)			{			close (sockFd);			error ("Accept failed");			}		doRequest (newSockFd, &clientAddr);		printf ("\nServer socket closing\n");	/* These three lines would not */		close (sockFd);							/* be here in a more typical */		exit (0);								/* application. */		}	}/************************************************************************ * * doRequest - read the clients requests from the socket and honor them. * * In a more typical application, this routine would fork of anouther * process to handle the request. * */LOCAL void doRequest (sock, pClientAddr)	SOCK_FD sock;	struct sockaddr_in * pClientAddr;	{	char 	buf [MAX_MSG_SIZE];	int 	msgSize;	char *	pClientInet;	u_short	clientPort;	pClientInet = inet_ntoa(pClientAddr->sin_addr);	clientPort	= ntohs(pClientAddr->sin_port);	printf ("Client connected from inet %s, port %d\n\n",			pClientInet, clientPort );		FOREVER		{		msgSize = read (sock, buf, MAX_MSG_SIZE - 1);		/* Read error ? */		if (msgSize < 0)			{			close (sock);			error ("Read failed");			}		/* Connection closed ? */		else if (msgSize == 0)			{			close (sock);			break;			}		/* Print client message and send reply */		else			{			printf ("Here is your %d byte message: \n%s\n\n", msgSize, buf);			printf ("Enter message to send back: ");			fflush (stdout);			msgSize = read (STDIN_FILENO, buf, MAX_MSG_SIZE);			buf [msgSize] = '\0';			/* must null terminate string */	     	if (write (sock, buf, msgSize+1) < 0)				{				close (sock);				error ("Write failed.");				}			}		}	}/************************************************************************ * * error - print an error message and exit. * */LOCAL void error (pStr)	char * pStr;	{	perror (pStr);	exit (1);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -