Example #1
0
int main(int argc, char** argv)
{
    if(!DbInit()){
	cout<<"DbInit() failed!"<<endl;
	exit(-1);
    }
    cout<<"BDB init finished!"<<endl;

    MSocket server;
    int port=PORT;
    if(server.Create()==false){
	cout<<"socket create error"<<endl;
	return 0;
    }
    //server.SetNonblock(false);
    if(server.Bind(port) != 0){
	cout<<"socket bind error!"<<endl;
	return 0;
    }
    if(server.Listen()!=0){
	cout<<"socket listen error"<<endl;
	return 0;
    }

    MThread threadPool[THREAD_MAX];
    for(int i=0;i<THREAD_MAX;i++){
	threadPool[i].Create(handleClientThread,(void*)&threadPool[i]);
    }
    MSocket* pclient=NULL;
    while(true){
	pclient=server.Accept();    //pclient need to be deleted
	if(pclient!=NULL){          //if blocking, NULL means accept ERROR
	    cout<<"Server Accept connect socket-------------------------------"<<endl;
	    MutexClient.Lock();
	    clientDeque.push_back(pclient);
	    MutexClient.Unlock();
	    
	}else
	{
	    cout<<"test: Blocking Socket Accept error! now sleep(100)"<<endl;
	    MThread::Sleep(100);
	}
    }
    server.Close();


    return 0;
}
Example #2
0
void NFSClient::RefreshTask::Invoke()
{
	NFSClient* pClient = (NFSClient*)GetData();

	if (pClient == NULL)
	{
		return;
	}

	NFS_HEAD head;
	head.m_nMsgCode = CODE_TEST;

	char szBuf[4096+512] = {0};//4096表示buffer区,512表示包头

	if (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen > 0)
	{
		pClient->SendCmd(CODE_REFRESH_BEGIN);
	}
	else
	{
		pClient->SendCmd(CODE_REFRESH_FAILED);
		return;
	}

	head.m_iType = NFS_HEAD_DATA;
	head.m_nIndex = 0;
	head.m_nMsgCode = CODE_REFRESH_DOING;


	int iLeft = (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen)%MAX_DATA_LEN;
	int iCout = (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen)/MAX_DATA_LEN;

	head.m_nCount = iCout + 1;

	cout<<"刷新的传输次数:"<<head.m_nCount<<endl;

	MSocket* pClientDataSocket = pClient->m_pServerModule->m_pServer->m_DataSocket.Accept();

	for (int i = 0; i < iCout; ++i)
	{
		head.m_nLength = MAX_DATA_LEN;
		head.m_nIndex = i;
		head.SetBuffer(pClient->m_pServerModule->m_pServer->m_pszAllFileInfo + MAX_DATA_LEN*i,MAX_DATA_LEN);
		unsigned long len = head.GetStream(szBuf);
		unsigned int nResult = 0;

		pClientDataSocket->Send(szBuf,len);	
	}

	head.m_nLength = iLeft;
	head.m_nIndex = iCout;
	head.SetBuffer(pClient->m_pServerModule->m_pServer->m_pszAllFileInfo + MAX_DATA_LEN*iCout,iLeft);
	unsigned long len = head.GetStream(szBuf);
	pClientDataSocket->Send(szBuf,len);

	head.m_nLength = 0;
	head.m_nIndex = 0;
	head.m_nMsgCode = CODE_REFRESH_SUCCESS_DONE;
	len = head.GetStream(szBuf);

	pClientDataSocket->Send(szBuf,len);

	pClientDataSocket->Close();

	pClient->SendCmd(CODE_REFRESH_FINISH);
}