当前位置: 首页>>代码示例>>C++>>正文


C++ CBuffer::GetDataLen方法代码示例

本文整理汇总了C++中CBuffer::GetDataLen方法的典型用法代码示例。如果您正苦于以下问题:C++ CBuffer::GetDataLen方法的具体用法?C++ CBuffer::GetDataLen怎么用?C++ CBuffer::GetDataLen使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CBuffer的用法示例。


在下文中一共展示了CBuffer::GetDataLen方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: SendData

void CNiThread::SendData(CBuffer& bufDataSnd,const CString& strClientAddr)
{
	if(bufDataSnd.GetDataLen()<=0 || strClientAddr.GetLength()<=0)
		return;

	NI_TASK_PARAM_TYPE* pNiTask = new  NI_TASK_PARAM_TYPE;
	if(pNiTask != NULL)
	{
		//pNiTask->pSendData = &bufDataSnd;
		pNiTask->pSendData = new CBuffer();
		if(pNiTask->pSendData!=NULL)
		{
			//加装数据包头
			if(pNiTask->pSendData->Alloc(bufDataSnd.GetDataLen()+PACKAGE_HEAD_LEN))
			{
				//填写数据包头部
				DWORD* pPackageEntityLen = (DWORD*)pNiTask->pSendData->GetBufP();
				*pPackageEntityLen=bufDataSnd.GetDataLen();
				pNiTask->pSendData->SetDataLen(PACKAGE_HEAD_LEN);
				pNiTask->pSendData->AppendData(bufDataSnd);

				//memcpy(pNiTask->pSendData,bufDataSnd.GetBufP(),bufDataSnd.GetDataLen());
				//pNiTask->pSendData->SetDataLen(bufDataSnd.GetDataLen()+PACKAGE_HEAD_LEN);
			}
		}
		//填写发送地址
		pNiTask->strClientAddr = strClientAddr;

		//提交发送任务
		CommitNiTask(NITASK_SEND,pNiTask);
	}
}
开发者ID:hongbaotong,项目名称:FileShare,代码行数:32,代码来源:NiThread.cpp

示例2: SendFile

void CNiThread::SendFile(CBuffer& bufDataSnd,const CString& strClientAddr)
{
	if(bufDataSnd.GetDataLen()<=0 || strClientAddr.GetLength()<=0)
		return;

	NI_TASK_PARAM_TYPE* pNiTask = new  NI_TASK_PARAM_TYPE;
	if(pNiTask != NULL)
	{
		//pNiTask->pSendData = &bufDataSnd;
		pNiTask->pSendData=new CBuffer(bufDataSnd.GetDataLen());
		pNiTask->pSendData->SetData(bufDataSnd);
		//填写发送地址
		pNiTask->strClientAddr = strClientAddr;

		//提交发送任务
		CommitNiTask(NITASK_SEND,pNiTask);
	}
}
开发者ID:hongbaotong,项目名称:FileShare,代码行数:18,代码来源:NiThread.cpp

示例3: OnSocketReceive

void CNiThread::OnSocketReceive(CNotifySocket* pSrcSocket,int nErrorCode)
{
	//当进入预关闭流程时,拒绝外部请求
	if(m_bPreShutdown)
		return;

	ClientSocketInfoType* pClientInfo  = FindClientInfoByAddr(pSrcSocket);
	if(pClientInfo!=NULL)
	{
		//获取Socket内部接收缓冲区长度
		int nSocketRecvBufLen = 0;
		int nSocketOptLen = sizeof(nSocketRecvBufLen);
		pSrcSocket->GetSockOpt(SO_RCVBUF,&nSocketRecvBufLen,&nSocketOptLen);

		//当资源不足时关闭对应Socket
		BOOL bCloseSocket = FALSE;

		while(TRUE)
		{
			CBuffer* pBufRecv;
			pBufRecv=new CBuffer(nSocketRecvBufLen);
			//pBufRecv->Alloc(nSocketRecvBufLen);
			if(pBufRecv!=NULL)
			{
				int nRecvLen = pSrcSocket->Receive(pBufRecv->GetBufP(),nSocketRecvBufLen);
				if(nRecvLen>0)
				{
					pBufRecv->SetDataLen(nRecvLen);
				}
				else
				{
					delete pBufRecv;
					break;
				}
			}
			else
			{
				bCloseSocket = TRUE;
				break;
			}

PROCESS_RECEIVE:
			//数据入队
			pClientInfo->queRecv.Add(pBufRecv);
			pBufRecv = NULL;

			//取缓存的数据总长度
			DWORD nSumDataLen = 0;
			for(int i=0;i<pClientInfo->queRecv.GetCount();++i)
			{
				nSumDataLen +=pClientInfo->queRecv[i]->GetDataLen();
			}

			if(pClientInfo->nPackageNeedRecv == 0)//在一个数据包接收任务的开始
			{

				//如果数据总长度超过包头长度
				if(nSumDataLen>=PACKAGE_HEAD_LEN)
				{
					//合成数据
					CBuffer* pBufCompose;
					pBufCompose=new CBuffer(nSumDataLen);
					//pBufCompose->Alloc(nSumDataLen);
					if(pBufCompose != NULL)
					{
						BYTE* pOffset = pBufCompose->GetBufP();
						//合成数据并清理包头缓存
						while(pClientInfo->queRecv.GetCount()>0)
						{
							memcpy(pOffset,pClientInfo->queRecv[0]->GetBufP(),pClientInfo->queRecv[0]->GetDataLen());
							pOffset += pClientInfo->queRecv[0]->GetDataLen();

							delete pClientInfo->queRecv[0];
							pClientInfo->queRecv.RemoveAt(0);
						}
						pBufCompose->SetDataLen(nSumDataLen);

						//获得数据包有效数据长度
						DWORD nPackageHead = *((int*)pBufCompose->GetBufP());

						//根据数据长度进行不同的处理
						if( nSumDataLen<nPackageHead+PACKAGE_HEAD_LEN)//如果总长度大于或等于头部长度且没超过需接收的长度,则还有多余的数据需要入接收队列
						{
							//设置待接收数据长度
							pClientInfo->nPackageNeedRecv = nPackageHead ;

							//剪除头部数据
							pBufCompose->CutHeadData(PACKAGE_HEAD_LEN);
							if(pBufCompose->GetDataLen()>0)
								pClientInfo->queRecv.Add(pBufCompose);
							else//接收数据长度刚好等于包头
								delete pBufCompose;
							
						}
						else //if(nSumDataLen>=nPackageHead+PACKAGE_HEAD_LEN)//数据一次接够的
						{
							int nExtraLen = nSumDataLen-nPackageHead-PACKAGE_HEAD_LEN;
							CBuffer *pNextMissonHead = NULL;
							//缓存下次任务数据
							if(nExtraLen>0)
//.........这里部分代码省略.........
开发者ID:hongbaotong,项目名称:FileShare,代码行数:101,代码来源:NiThread.cpp


注:本文中的CBuffer::GetDataLen方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。