📄 main.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 + -