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

📄 main.c

📁 Web服务器V1.01,Win Socket底层开发
💻 C
字号:
/********************************************************************
** WebSrv -- main.c
**
** Steven Lee	2002.11
********************************************************************/

#include <Windows.h>
#include <TCHAR.h>
#include <stdio.h>

#include "WinSockEx.h"
#include "SrvCtrl.h"
#include "WebSrvDefs.h"
#include "SysExts.h"

void	AboutWebSrv(void);
void	HelpCmds(void);
void	DisplayConfigs(void);
BOOL	AnalysisCmd(int,char*[]);
BOOL	GetCmd(LPTSTR);
BOOL	DispatchCmd(LPCTSTR);

int main(int argc,char* argv[])
{
	TCHAR	pszError[MAX_PATH];
	TCHAR	pszCmd[MAX_PATH];

	AboutWebSrv();											//About WebSrv
	
	if( !InitWinSocket( pszError ) )						//Init WinSocket
	{
		_tprintf( pszError );

		return 1;
	}

	InitSrvCtrl();											//Init Server Ctrl

	if( !AnalysisCmd(argc,argv) )							//Analyse Command Messages
		return 1;

	_tprintf( _T("Starting Server...\n") );					//Start Server
	if( !StartServer( pszError ) )				
	{
		_tprintf( pszError );

		return 1;
	}
	else
	{
		_tprintf( _T("Start Server Successfully!\n") );
		_tprintf( _T("Server Port: %d\n"),SetServerPort(-1) );
	}

	SetConsoleCtrlHandler( ConsoleCtrlEvent,TRUE );			//Set Console Handler
	SetConsoleTitle( _T("WebSrv.exe -- Web Server running..") );
	
	while( GetCmd( pszCmd ) )								//Command Dispatching
	{
		if( !DispatchCmd( pszCmd ) )
			break;
	}

	PauseWhenTerminate();
	return 0;
}

void AboutWebSrv(void)
{
	_tprintf( _T("****************************************************************\n") );
	_tprintf( _T("** WebSrv.exe -- V1.01                                        **\n") );
	_tprintf( _T("** Min Web Server Sample for HTTP Server                      **\n") );
	_tprintf( _T("** CopyRight To    Steven Lee  2002.11     NJTU   JK00-4      **\n") );
	_tprintf( _T("**                                                            **\n") );
	_tprintf( _T("** Usage:                                                     **\n") );
	_tprintf( _T("**    WebSrv [[-p] -port number] [[-c] -max users]            **\n") );
	_tprintf( _T("**    WebSrv [-h/?/help]                                      **\n") );
	_tprintf( _T("****************************************************************\n") );
}

BOOL	AnalysisCmd(int argc,char* argv[])
{
	LPTSTR	lpszTok;
	int		n;
	LPCTSTR lpctSeps = _T(" ");
	int		i = 1;

	while(i<argc)
	{
		lpszTok = _tcstok( argv[i],lpctSeps );
		lpszTok++;
		if( (_tcsicmp( lpszTok,_T("h") ) == 0) || (_tcsicmp( lpszTok,_T("?") ) == 0) 
			|| (_tcsicmp( lpszTok,_T("help") ) == 0) )
		{
			HelpCmds();
			return FALSE;
		}
		else if( _tcsicmp( lpszTok,_T("p") ) == 0 )
		{
			i++;
			if( i >= argc )
				return TRUE;
			n = atoi( argv[i] );
			i++;
			SetServerPort( n );
		}
		else if( _tcsicmp( lpszTok,_T("c") ) == 0 )
		{
			i++;
			if( i >= argc )
				return TRUE;
			n = atoi( argv[i] );
			i++;
			SetMaxUsers( n );
		}
	}

	return TRUE;
}

BOOL GetCmd(LPTSTR pszCmd)
{
	_tprintf( _T("-") );
	_getts( pszCmd );
	
	return TRUE;
}

BOOL DispatchCmd(LPCTSTR lpszCmd)
{
	LPTSTR		strTok;
	int			n = 0;
	const CHAR	seps[] = _T(" ");
	
	if( _tcslen(lpszCmd) == 0 )
		return TRUE;

	strTok = _tcstok( (LPTSTR)lpszCmd,seps );
	if( (_tcsicmp( strTok,_T("quit") ) == 0) || (_tcsicmp( strTok,_T("q") ) == 0) )
	{
		if( StopServer( 5000 ) )
		{
			_tprintf( _T("Web Server Stopped!\n") );
			return FALSE;
		}
	}
	else if( (_tcsicmp( strTok,_T("help") ) == 0) || (_tcsicmp( strTok,_T("?") ) == 0) )
		HelpCmds();
	else if( (_tcsicmp( strTok,_T("pause") ) == 0) || (_tcsicmp( strTok,_T("p") ) == 0) )
	{
		if( StopServer(5000) )
			_tprintf( _T("WebSrv Stopped!\n") );
	}
	else if( (_tcsicmp( strTok,_T("start") ) == 0) || (_tcsicmp( strTok,_T("s") ) == 0) )
	{
		if( !ServerRunning() )
		{
			_tprintf( _T("Starting WebSrv...\n") );
			if( StartServer(NULL) )
				_tprintf( _T("WebSrv Started!\n") );
		}
	}
	else if( (_tcsicmp( strTok,_T("maxusers") ) == 0) || (_tcsicmp( strTok,_T("m") ) == 0) )
	{
		strTok = _tcstok( NULL,seps );
		if( (strTok != NULL) && (_tcslen(strTok) > 0) )
			n = atoi( strTok );
		_tprintf( _T("Current max users number: %d\n"),SetMaxUsers( n ) );
	}
	else if( (_tcsicmp( strTok,_T("nport") ) == 0) || (_tcsicmp( strTok,_T("n") ) == 0) )
	{
		strTok = _tcstok( NULL,seps );
		if( (strTok != NULL) && (_tcslen(strTok) > 0) )
			n = atoi( strTok );
		if( n > 0 )
			_tprintf( _T("Server port cannot be changed when running.\n") );
		_tprintf( _T("Current server port: %d\n"),SetServerPort( n ) );
	}
	else if( (_tcsicmp( strTok,_T("config") ) == 0) || (_tcsicmp( strTok,_T("c") ) == 0) )
		DisplayConfigs();

	return TRUE;
}

void HelpCmds(void)
{
	_tprintf( _T("\n") );
	_tprintf( _T(" Usage:\n") );
	_tprintf( _T("    WebSrv [[-p] -port number] [[-c] -max users]\n") );
	_tprintf( _T("\n") );
	_tprintf( _T(" Comands:\n") );
	_tprintf( _T("\t-Q  Quit\t\tStop and exit the server application.\n") );
	_tprintf( _T("\t-?  Help\t\tShow WebSrv Helps\n") );
	_tprintf( _T("\t-P  Pause\t\tStop Web server\n") );
	_tprintf( _T("\t-S  Start\t\tStart the Web Server\n") );
	_tprintf( _T("\t-M  MaxUsers [count]\tQuery or set the number of max users\n") );
	_tprintf( _T("\t-N  nPort [number]\tQuery or set the number of the server port\n") );
	_tprintf( _T("\t-C  Config\t\tQuery the configurations of the web servers\n") );
}

void DisplayConfigs(void)
{
	_tprintf( _T("\tWebSrv v1.1\tCopyRight(c)  Steven Lee\n") );
	_tprintf( _T("\tServer %s\n"),ServerRunning() ? _T("Running") : _T("Stopped") );
	_tprintf( _T("\tServer configurations:\n") );
	_tprintf( _T("\tServer Port: \t\t\t%d\n"),SetServerPort( 0 ) );
	_tprintf( _T("\tServer Max Users Number: \t%d\n"),SetMaxUsers( 0 ) );
	_tprintf( _T("\tServer Bind IP: \t\t%s\n"),GetLocalIP() );
	_tprintf( _T("\tConnected Users Number: \t%d\n"),GetUsersNumber() );
}

⌨️ 快捷键说明

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