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