bool CServer:: _receive_from_client()
{
char szRet[ SZBUFF ];
m_strRet = string( " Hello client, Welcome!/n" );
m_strRet.append( " You asked:'" );
if( recv( m_iFlIndCli, szRet, SZBUFF, 0 ) < 0 )
{
_error( "Can't receive data from the asked server!" );
return false;
}
cout<<"msg={"<<szRet<<"}"<<endl;
m_strRet.append( szRet );
return true;
}//
void CServer::wait()
{
while( 1 )
{
if( !_accept_client() )
return;
///
///For receiving the message from each client
///
if( _receive_from_client() )
{
long tmsp = time( NULL );
string strTm( ctime( &tmsp ) );
cout<<"==========================================="<<endl
<<"At "<<strTm<<" from "<<inet_ntoa( m_addrCli.sin_addr )<<":"<<ntohs( m_addrCli.sin_port )<<endl
<<"==========================================="<<endl;
m_strRet.append( "'/n" );
m_strRet.append( " now be returned at " );
m_strRet.append( strTm );
m_strRet.append( " to your Client-IP:" );
m_strRet.append( inet_ntoa( m_addrCli.sin_addr ) );
m_strRet.append( ":" );
char sz[ 20 ]; sprintf( sz, "%d", ntohs( m_addrCli.sin_port ) );
m_strRet.append( sz );
if( !_send() ) exit( 1 );
_write_log( m_strRet.c_str() );
close( m_iFlIndCli );
}
else
{
close( m_iFlIndSer );
close( m_iFlIndCli );
exit( 1 );
}
}//
}//
bool CServer::_bind()
{
if( bind( m_iFlIndSer, ( TSOCKADDR* )&m_addrSer, sizeof( m_addrSer ) ) < 0 )
{
_error( "Can't bind to this computer(server)!" );
close( m_iFlIndSer );
return false;
}//
return true;
}//
bool CServer:: _socket()
{
if( ( m_iFlIndSer = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 )
{
_error( "Can't create a sock at server!" );
return false;
}
return true;
}//
bool CServer::_listen()
{
if( listen( m_iFlIndSer, LEN_LISTEN_QUEUE ) < 0 )
{
_error( "The server can't listen at the port!" );
close( m_iFlIndSer );
return false;
}
return true;
}//
bool CServer::_accept_client()
{
socklen_t iLen = sizeof( m_addrCli );
if( ( m_iFlIndCli = accept( m_iFlIndSer, ( TSOCKADDR* )&m_addrCli, &iLen ) ) < 0 )
{
_error( "The client can't be accepted by the server!" );
close( m_iFlIndSer );
return false;
}//
return true;
}//
bool CServer::_send()
{
if( send( m_iFlIndCli, m_strRet.c_str(), SZBUFF, 0 ) < 0 )
{
_error( "Can not send message to connected client!" );
close( m_iFlIndSer );
close( m_iFlIndCli );
return false;
}//
return true;
}//
void CServer::_init( int iPort )
{
if( !_socket() ) exit( 1 );
memset( &m_addrSer, 0, sizeof( m_addrSer ) );
m_addrSer.sin_family = AF_INET;
m_addrSer.sin_port = htons( iPort );
m_addrSer.sin_addr.s_addr = htons( INADDR_ANY );
if( !_bind() ) exit( 1 );
if( !_listen() ) exit( 1 );
}//
void CServer::_write_log( const char* sz )
{
try
{
long tmsp = time( NULL );
///ctime( &tmsp );
char szFileName[ SZBUFF ];
sprintf( szFileName, "%i.log", tmsp );
ofstream of( szFileName );
of<<sz<<endl<<endl;
cout<<"A log file is created... ..."<<endl;
of.close();
}
catch( exception& e )
{
_error( const_cast<char*>( e.what() ) );
}
}//
CServer::CServer( int iPort )
:m_iFlIndSer( 0 ),
m_iFlIndCli( 0 )
{
_init( iPort );
}//
CServer::~CServer(){ close( m_iFlIndSer ); }//