⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.cpp

📁 LINUX 线程池源代码:Lock.cpp : 锁的操作 , 读锁可以并发 , 写锁独占. Queue.h : 队列的封装 , 队列的读和写都加了锁的保护. Socket.c
💻 CPP
字号:
#include "Data.h"G_Data::G_Data(G_RecvMessThread *recvMessThread) : g_recvMessThread(recvMessThread){}G_Data::G_Data(){}G_Data::~G_Data(){}int G_Data::sendn(int nSocket , const void *pStr , unsigned int nLen){	int n = nLen , nRet;	char *str = (char*)pStr;	while(n > 0)	{		nRet = send(nSocket , str , n , MSG_NOSIGNAL);		if(nRet <= 0)		{			if(errno == EINTR)			{				continue;			}			return -1;		}		n -= nRet;		str += nRet;	}	return (nLen - n);}int G_Data::recvn(int nSocket , void *pStr , unsigned int nLen){	int n = nLen;	char *str = (char*)pStr;	while(n > 0)	{		int nRet = recv(nSocket , str , n , MSG_NOSIGNAL);		if(nRet <= 0)		{			if(errno == EINTR)			{				continue;			}			break;		}		n -= nRet;		str += nRet;	}	return (nLen - n);}int G_Data::packet(const void *pStr , unsigned int nLen , char *pBuffer){	bcopy(pStr , &pBuffer[G_PHLEN] , nLen);	*(unsigned int *)pBuffer = nLen;	return (nLen + G_PHLEN);}int G_Data::packetSize(const char *pStr){	return (*(unsigned int*)pStr);}void G_Data::unPacket(const void *in , unsigned int fromLen , unsigned int nLen , void *out){	bcopy(&((char*)in)[G_PHLEN+fromLen] , out , nLen);}int G_Data::sendData(int nSocket , const void *pStr , unsigned int nLen){	char pBuffer[G_MAXDATABUFFSIZE];	bzero(pBuffer , sizeof(pBuffer));	if(!pStr)	{		return -1;	}	int nSize = packet(pStr , nLen , pBuffer);	int nRet = sendn(nSocket , pBuffer , nSize);	return nRet;}bool G_Data::recvData(int nSocket){	char pBuffer[G_MAXDATABUFFSIZE]; char pStr[G_MAXDATABUFFSIZE];	bzero(pBuffer , sizeof(pBuffer));	bzero(pStr , sizeof(pStr));	int fromLen = 0 , n;	int nSize = recvn(nSocket , pBuffer , sizeof(pBuffer));    ///返回接收数据大小	if(nSize <= 0)	{		return false;	}		while(1)	{		n = packetSize(&pBuffer[fromLen]);   /// 返回数据真正大小		unPacket(pBuffer , fromLen , n , pStr);    ///把真正数据存放到pStr中		g_recvMessThread->pushData((std::string)pStr);          ///放到数据池队列中		n += sizeof(unsigned int);		fromLen += n;		if(fromLen == nSize)		{			break;    ///如果数据都取完了退出循环		}	}	return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -