?? server.cpp
字號:
#include "server.h"
Server::Server( const char * port,SimpleLog &logfile ):ProcPool(logfile)
{
_port=string(port);
_server=new ServerSocket(port);
assert(_server!=NULL);
__logfile->Userlog(DEBUG,"in server default constructor,port[%s]",port);
}
Server::Server( const char * port,SimpleLog &logfile,int& max,int& init,int &low,int& high,int& inc,int& dec ):ProcPool(logfile,max,init,low,high,inc,dec)
{
_port=string(port);
_server=new ServerSocket(port);
assert(_server!=NULL);
__logfile->Userlog(DEBUG,"in server constructor with 7 param,port[%s]",port);
}
Server::Server( const char * port,SimpleLog &logfile,int& max,int& init,int &low,int& high,int& inc,int& dec,int &timeout ):ProcPool(logfile,max,init,low,high,inc,dec,timeout)
{
_port=string(port);
_server=new ServerSocket(port);
assert(_server!=NULL);
__logfile->Userlog(DEBUG,"in server constructor with 8 param,port[%s]",port);
}
void *Server::WaitTask( )
{
//cout<<"wait task"<<endl;
//鎖定套結字
if(!_acceptlock->lock( ))
{
//cout<<"lock"<<endl;
__logfile->Userlog(DEBUG,"in wait task,lock socket error");
return NULL;
}
//接收連接
//cout<<"before accepr"<<endl;
Socket *sock=_server->accept_connect( );
//cout<<"after accepr"<<endl;
_acceptlock->unlock( );
if( sock )
__logfile->Userlog(DEBUG,"Client [%s] connect...",_server->client_ip( ).c_str( ));
return sock;
}
bool Server::doTask(void *task )
{
//cout<<"do task"<<endl;
Socket *sock= static_cast<Socket *>(task);
char buffer[MAXBUFFERSIZE];
memset(buffer,0,sizeof(buffer));
int recv_len=0;
if( (recv_len=sock->receive(buffer,MAXBUFFERSIZE-1,TIMEOUT)) < 0)
{
__logfile->Userlog(ERROR,"Client [%s] recv error[%s]",_server->client_ip( ).c_str( ),strerror(errno));
delete sock;
return false;
}
if(!AuthorizeClient(buffer,recv_len))
{
__logfile->Userlog(ERROR,"Client [%s] auhorize error",_server->client_ip( ).c_str( ));
delete sock;
return false;
}
//record what receive
if(buffer[recv_len]=='\0')
__logfile->Userlog(INFO,"Client[%s]recv:[%s]",_server->client_ip( ).c_str( ),buffer);
else
{
string logString;
char logInfo[5];
for( int i=0;i<recv_len;i++)
{
sprintf( logInfo,"[%02x]",logInfo[i] );
logString+=logInfo;
}
__logfile->Userlog(INFO,"Client[%s]recv:[%s]",_server->client_ip( ).c_str( ),logString.c_str( ));
}
//此處需要添加對接收到的數據進行處理的程序
//--------------------------------------------
//--------------------------------------------
char back[10];
sprintf(back,"%s","OK");
__logfile->Userlog(INFO,"Client[%s]send:[%s]",_server->client_ip( ).c_str( ),back );
sock->Send(back,strlen(back));
//cout<<"Task is over"<<endl;
delete sock;
return true;
}
bool Server::Init( )
{
__logfile->Userlog(DEBUG,"in server init");
//cout<<"in bankserver init"<<endl;
return IncreaseChld(InitNum);
}
bool Server::AuthorizeClient( char *recv,int& len)
{
if(len<=0)
return false;
for(int i=0;i<len;i++)
if(recv[i]=='\0')
recv[i]='\n';
cout<<_server->client_ip( )<<"校驗完成"<<endl;
__logfile->Userlog(DEBUG,"Client[%s] authorize over",_server->client_ip( ).c_str( ));
return true;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -