Implementation of CServer

 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 ); }//

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

allen1981813

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值