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

📄 main.cpp

📁 Windows Socket封装类,网络编程有
💻 CPP
字号:
/*
 *	Summary:
 *		程序主函数源文件
 *	Author:
 *		Steven Lee
 *	Version:
 *		1.0.0
 *	History:
 *		2004.4.17创建本文件
 */

#include <windows.h>
#include <stdio.h>
#include "SockWrap.h"

using namespace	Lee::Net;

class CSockApp
{
private:
	CTcpServer*	m_pSrv;
	CTcpClient*	m_pClt;
public:
	static void Help()
	{
		printf( "socket.exe v1.01\n" );
		printf( "Steven Lee\t2004.4.19\n" );
		printf( "Demo for socket wrappers\n\n" );
		printf( "Usage:\n" );
		printf( "\tsocket /s port\n" );
		printf( "\tsocket /c server port\n\n" );
	}

	CSockApp()
	{
		m_pSrv = NULL;
		m_pClt = NULL;
	}

	~CSockApp()
	{
		if( m_pSrv )
			delete m_pSrv;
		if( m_pClt )
			delete m_pClt;
	}

	bool StartUp(int port)
	{
		m_pSrv = new CTcpServer((u_short)port);
		if( !m_pSrv->IsValid() )
			return false;

		if( !m_pSrv->Listen() )
			return false;

		m_pClt = new CTcpClient();

		while ( !m_pSrv->Wait(100) );
		
		return m_pSrv->Accept(*m_pClt,NULL);
	}

	bool StartUp(LPCTSTR lpctSrv,int port)
	{
		m_pClt = new CTcpClient();

		return m_pClt->Connect(CSockaddr((u_short)port,lpctSrv));
	}

	bool EchoRemote()
	{
		while( !m_pClt->Select(100,CSockBase::SST_READ) );
		
		char		szBuffer[MAX_PATH];
		
		ZeroMemory( szBuffer,sizeof(TCHAR) * MAX_PATH );
		if( m_pClt->Read( szBuffer,MAX_PATH - 1 ) <= 0 )
			return false;
		printf( "Remote:\t%s\n",szBuffer );

		return stricmp( szBuffer,"exit" ) != 0;
	}

	bool SendLocal()
	{
		char		szBuffer[MAX_PATH];

		printf( "Local:\t" );
		scanf( "%s",szBuffer );
		if( !m_pClt->WriteBuffer( szBuffer,strlen(szBuffer) + 1 ) )
			return false;
		
		return stricmp( szBuffer,"exit" ) != 0;
	}
};

int main(int argc, TCHAR **argv)
{
	int		flag = 0;
	int		port = 8888;

	if( 3 == argc &&  stricmp( argv[1],"/s" ) == 0 )
	{
		port = atoi( argv[2] );
		if( 0 == port )
			return 1;
		flag = 1;
	}
	else if( 4 == argc && stricmp( argv[1],"/c" ) == 0 )
	{
		port = atoi( argv[3] );
		if( 0 == port )
			return 1;
		flag = 2;
	}

	if( 0 == flag )
	{
		CSockApp::Help();

		return 1;
	}

	if( !CWinsockets::StartUp() )
		return 2;

	CSockApp	theApp;

	switch(flag) 
	{
		case 1:
			if( !theApp.StartUp(port) )
				goto cleanup;
			break;
		case 2:
			if( !theApp.StartUp(argv[2],port) || !theApp.SendLocal() )
				goto cleanup;
			break;
		default:
			break;
	}

	while ( theApp.EchoRemote() ) 
	{
		if ( !theApp.SendLocal() ) 
			break;
	}

cleanup:
	CWinsockets::CleanUp();

	return 0;
}

⌨️ 快捷键说明

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