亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? netclient.cpp

?? EVC做的Windows Mobile 的H263網絡視頻
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			SetEvent(hExitEvent);//退出先前創建的線程
			return Error;
		}
		CloseHandle(ThreHan);
	}
	return Error;
}
bool CNetClient::SendMsg(char * pData,unsigned long DataLength)
{		
		//未調用初始化函數
		if(!IsStart || pData==NULL || DataLength==0)return false;
		//構造消息
		MSG_NODE Msg;
		Msg.DataLength=DataLength;
		memcpy(Msg.pData,pData,DataLength);
		//插入消息隊列
		::EnterCriticalSection(&SendMsgQueSection);
		if(SendMsgQueue.IsEmpty())
		{
			SendMsgQueue.EnQueue(Msg);
			::LeaveCriticalSection(&SendMsgQueSection);
			//如果消息隊列為空,告訴等待的發送線程可以發送了
			SetEvent(hSendEvent);
		}
		else
		{
			SendMsgQueue.EnQueue(Msg);
			::LeaveCriticalSection(&SendMsgQueSection);
		}
		return true;
}
void CNetClient::WriteLogString(LPCTSTR strLog)
{
	SYSTEMTIME sysTm;
	::GetLocalTime(&sysTm);
	//ofstream       OutputFile;
	//OutputFile.open( "NetClientLog.txt" ,ios::app);
	//OutputFile<<sysTm.wYear<<"年"<<sysTm.wMonth<<"月"<<sysTm.wDay<<"日"<<sysTm.wHour<<"時"<<sysTm.wMinute<<"分"<<sysTm.wSecond<<"秒"<<":"<<"    "<<strLog<<"\n"<<endl;
	//OutputFile.close();
}
/********************************************************************
函數名  : Queue<T>::~Queue() 
輸入參數:
輸出參數:
功能描述: 隊列析構函靈敏,清空所有隊列元素
全局變量: 無
調用模塊: 
附加說明: 
********************************************************************/
template <class T>  Queue<T>::~Queue()
{
	QueueNode<T> *p=front;
	while(front!=NULL)
	{
		p=front;
		front=front->link;
		delete p;
	}
}
/********************************************************************
函數名  : Queue<T>::EnQueue
輸入參數:
const T & item :要插入的結點的引用
輸出參數:
功能描述: 在隊列中插入一個結點
全局變量: 無
調用模塊: 
附加說明: 
********************************************************************/
template <class T> void Queue<T>::EnQueue(const T & item)
{
	if(front==NULL)front=rear=new QueueNode<T>(item,NULL);
	else rear=rear->link=new QueueNode<T>(item,NULL);
}
/********************************************************************
函數名  : Queue<T>::DeQueue() 
輸入參數:
T  :返回被刪除結點的值
輸出參數:
功能描述: 從隊列中取出一個結點,并返回該結點的值
全局變量: 無
調用模塊: 
附加說明: 
********************************************************************/
template <class T> T Queue<T>::DeQueue()
{
	T  retvalue;
	memset(&retvalue,0,sizeof(T));
	if(IsEmpty())
		return retvalue;
	QueueNode<T> * p=front;
	retvalue=p->data;
	front=front->link;
	delete p;
	return retvalue;
}
/********************************************************************
函數名  : Queue<T>::MakeEmpty() 
輸入參數:
輸出參數:
功能描述: 將隊列元素清空
全局變量: 無
調用模塊: 
附加說明: 
********************************************************************/
template <class T> void Queue<T>::MakeEmpty()
{
	if(front==NULL)return ;
	QueueNode<T> * p=front;
	while(front!=NULL)
	{
		p=front;
		front=front->link;
		delete p;
	}
	front=rear=NULL;
}
/*************************************************************************/
CClientSocket::CClientSocket()
{

}			
CClientSocket::~CClientSocket()
{
}
void CClientSocket::UnInit()
{
	ShutDownSocket();
	CloseSocekt();
	if(m_hExitEvent != (WSAEVENT)0xcccccccc)WSACloseEvent(m_hExitEvent);
}
bool CClientSocket::CreateSocket(SOCKET *pNewSocket,int iSockType)
{
	m_hExitEvent=WSACreateEvent();
	WSAResetEvent(m_hExitEvent);
	
	return ((*pNewSocket=WSASocket(AF_INET,iSockType,0,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)?
		false:true;
}
bool CClientSocket::BindSocket(SOCKET BindSocket,char *szHostAddr,unsigned short iHostPort)
{
	struct sockaddr_in inAddr;
	inAddr.sin_addr.S_un.S_addr=inet_addr(szHostAddr);
	inAddr.sin_family=AF_INET;
	inAddr.sin_port=htons(iHostPort);
	return (bind(BindSocket,(PSOCKADDR)&inAddr,sizeof(inAddr)))
		==SOCKET_ERROR?false:true;
}
bool CClientSocket::ShutDownSocket(SOCKET nowSocket)
{
	return shutdown(nowSocket,SD_BOTH)?false:true;
}
bool CClientSocket::CloseSocket(SOCKET nowSocket)
{
	return (closesocket(nowSocket)==SOCKET_ERROR)?false:true;
}
bool CClientSocket::SendData(SOCKET socket,char *data,DWORD len,DWORD *retlen,WSAEVENT hSendEvent,DWORD time)
{
	WSABUF DataBuf;
	WSAEVENT hEvents[2];
	WSAOVERLAPPED SendOverLapp;
	DWORD flag;

	hEvents[0]=m_hExitEvent;
	hEvents[1]=hSendEvent;
	DataBuf.buf=data;
	DataBuf.len=len;
	memset(&SendOverLapp,0,sizeof(WSAOVERLAPPED));
	SendOverLapp.hEvent=hSendEvent;
	flag=0;
	/////////////////////////////////////
	int ret;
	if((ret=WSASend(socket,&DataBuf,1,retlen,flag,&SendOverLapp,NULL))==0)
		return true;
	else if((ret==SOCKET_ERROR)&&(WSAGetLastError()==WSA_IO_PENDING))
	{
		DWORD EventCaused=WSAWaitForMultipleEvents(2,hEvents,FALSE,time,FALSE);
		WSAResetEvent(hSendEvent);
		if(EventCaused == WSA_WAIT_FAILED || EventCaused == WAIT_OBJECT_0)
		{
			if(EventCaused == WAIT_OBJECT_0)
				SetLastError(CLIENT_FUNERROR);
			return false;
		}
		flag=0;
		return WSAGetOverlappedResult(socket,&SendOverLapp,retlen,false,&flag)?
			true:false;
	}
	else
		return false;
}
bool CClientSocket::RecvData(SOCKET socket,char *data,DWORD len,DWORD *retlen,WSAEVENT hRecvEvent,DWORD time)
{
	WSABUF DataBuf;
	WSAEVENT hEvents[2];
	WSAOVERLAPPED RecvOverLapp;
	DWORD flag;

	hEvents[0]=m_hExitEvent;
	hEvents[1]=hRecvEvent;
	DataBuf.buf=data;
	DataBuf.len=len;
	memset(&RecvOverLapp,0,sizeof(WSAOVERLAPPED));
	RecvOverLapp.hEvent=hRecvEvent;
	flag=0;
	/////////////////////////////////////
	int ret;
	if((ret=WSARecv(socket,&DataBuf,1,retlen,&flag,&RecvOverLapp,NULL))==0)
		return true;
	else if((ret==SOCKET_ERROR)&&(WSAGetLastError()==WSA_IO_PENDING))
	{ 
		DWORD EventCaused=WSAWaitForMultipleEvents(2,hEvents,false,time,false);
		WSAResetEvent(hRecvEvent);
		if(EventCaused == WSA_WAIT_FAILED || EventCaused == WAIT_OBJECT_0)
		{
			if(EventCaused == WAIT_OBJECT_0)
				SetLastError(CLIENT_FUNERROR);
			return false;
		}
		flag=0;
		return WSAGetOverlappedResult(socket,&RecvOverLapp,retlen,false,&flag)?
			true:false;
	}
	else
		return false;
}
bool CClientSocket::SendDataS(SOCKET socket,char *data,DWORD len,DWORD *retlen,WSAEVENT hSendEvent,DWORD time)
{
	DWORD left,idx,thisret;
	left=len;
	idx=0;
	int oflag=0;
	while(left>0)
	{
		if(!SendData(socket,&data[idx],left,&thisret,hSendEvent,time))
		{
			*retlen=0;
			return false;
		}
		WSAResetEvent(hSendEvent);
		left-=thisret;
		idx+=thisret;
		if(thisret==0)
		{
			oflag++;
			if(oflag>5)
				break;
		}
	}
	*retlen=idx;
	return (idx==len)?true:false;
}
bool CClientSocket::RecvDataS(SOCKET socket,char *data,DWORD len,DWORD *retlen,WSAEVENT hRecvEvent,DWORD time)
{
	DWORD left,idx,thisret;
	left=len;
	idx=0;
	int oflag=0;
	while(left>0)
	{
		if(!RecvData(socket,&data[idx],left,&thisret,hRecvEvent,time))
		{
			*retlen=0;
			return false;
		}
		WSAResetEvent(hRecvEvent);
		left-=thisret;
		idx+=thisret;
		if(thisret==0)
		{
			oflag++;
			if(oflag>5)
				break;
		}
	}
	*retlen=idx;
	return (idx==len)?true:false;
}
bool CClientSocket::SendMsg(char * data,DWORD len,DWORD *retlen,DWORD time)
{
	WSAEVENT hEvent=WSACreateEvent();
	bool bSend=SendDataS(m_Socket,data,len,retlen,hEvent,time);
	WSACloseEvent(hEvent);
	return bSend;
}
bool CClientSocket::RecvMsg(char * data,DWORD len,DWORD *retlen,DWORD time)
{	
	WSAEVENT hEvent=WSACreateEvent();
	bool Recv=RecvData(m_Socket,data,len,retlen,hEvent,time);
	WSACloseEvent(hEvent);
	return Recv;
}
bool CClientSocket::ConnectSocket(char * szDestAddr,unsigned short iDestPort)
{
	struct sockaddr_in inAddr;
	inAddr.sin_family=AF_INET;
	inAddr.sin_port=htons(iDestPort);
	inAddr.sin_addr.S_un.S_addr=inet_addr(szDestAddr);
	return (connect(m_Socket,(PSOCKADDR)&inAddr,sizeof(inAddr)))
		    ==SOCKET_ERROR ? false:true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费视频网站高清观看视频| 成人av资源网站| 亚洲激情网站免费观看| 日韩一区二区三区免费看| 日本精品一级二级| 成年人网站91| 成人国产在线观看| 国产69精品一区二区亚洲孕妇| 麻豆精品精品国产自在97香蕉| 亚洲18色成人| 国产欧美一区视频| 久久精品免视看| 国产性色一区二区| 久久综合九色欧美综合狠狠| 精品国精品自拍自在线| 777午夜精品视频在线播放| 欧美艳星brazzers| 精品污污网站免费看| 欧美色图激情小说| 91影视在线播放| 91蜜桃婷婷狠狠久久综合9色| 99re这里只有精品6| 色婷婷综合久久久久中文| 99精品欧美一区| 972aa.com艺术欧美| 色先锋资源久久综合| 日本福利一区二区| 欧美性欧美巨大黑白大战| 不卡视频一二三四| 91免费在线看| 欧美艳星brazzers| 7777精品伊人久久久大香线蕉完整版 | 丝袜国产日韩另类美女| 日日摸夜夜添夜夜添国产精品 | 国产高清精品网站| 国产一区不卡视频| av成人免费在线观看| 色欧美日韩亚洲| 色噜噜夜夜夜综合网| 欧美日韩在线一区二区| 欧美一区二区三区四区久久| www国产精品av| 国产精品久久午夜| 18成人在线观看| 亚洲精品日韩专区silk| 偷拍日韩校园综合在线| 久久99国产精品久久99果冻传媒| 国产乱色国产精品免费视频| av在线不卡免费看| 欧美日韩免费高清一区色橹橹| 日韩欧美一区二区视频| 国产精品入口麻豆原神| 亚洲成人tv网| 国产精品资源在线看| 色天天综合色天天久久| 日韩亚洲欧美高清| 中文字幕国产精品一区二区| 亚洲h在线观看| 国产成人av影院| 欧美影院一区二区| 久久久综合精品| 亚洲精品五月天| 视频一区国产视频| 高清shemale亚洲人妖| 欧美自拍丝袜亚洲| 久久婷婷综合激情| 亚洲一二三四在线| 久久 天天综合| 91久久免费观看| 久久精品综合网| 偷偷要91色婷婷| 国产精一品亚洲二区在线视频| 色综合久久久久综合体桃花网| 日韩免费高清av| 一区二区三区不卡在线观看| 亚洲午夜久久久久久久久电影网 | 欧美猛男男办公室激情| 国产丝袜美腿一区二区三区| 亚洲福利视频导航| 久久er99热精品一区二区| 高清不卡在线观看av| 欧美一区二区在线播放| 一区二区三区日韩欧美精品| 韩国成人精品a∨在线观看| 欧美一区二区三区四区高清| 亚洲成人精品一区二区| 91精彩视频在线| 亚洲精品一二三| 91色porny| 国产精品不卡一区二区三区| 成人免费高清在线| 国产欧美日产一区| 国产福利视频一区二区三区| 久久久久国产精品厨房| 国产精品一区久久久久| 久久午夜免费电影| 国产精品一区二区久激情瑜伽| 日韩精品在线一区二区| 另类小说一区二区三区| 日韩一级大片在线观看| 美女视频黄 久久| 日韩欧美精品在线| 久久99国产精品尤物| 亚洲精品一区二区三区在线观看| 老司机午夜精品| 久久亚洲一区二区三区明星换脸 | 91精品国产黑色紧身裤美女| 天天影视色香欲综合网老头| 欧美日韩在线播放三区| 天涯成人国产亚洲精品一区av| 欧美日韩三级一区| 热久久国产精品| 日韩女优制服丝袜电影| 国产一区二区三区av电影 | 亚洲激情av在线| 精品视频在线看| 日av在线不卡| 久久众筹精品私拍模特| 成人免费毛片a| 玉米视频成人免费看| 欧美日韩综合在线免费观看| 免费欧美高清视频| 久久久久久99久久久精品网站| 成人蜜臀av电影| 亚洲另类在线一区| 在线播放欧美女士性生活| 美女免费视频一区| 国产欧美一区二区三区在线老狼| 国产99久久久国产精品| 亚洲柠檬福利资源导航| 欧美日韩视频不卡| 韩国av一区二区三区四区| 欧美国产乱子伦| 欧美性色黄大片| 国内精品免费在线观看| 中文字幕佐山爱一区二区免费| 在线亚洲欧美专区二区| 蜜桃91丨九色丨蝌蚪91桃色| 国产日韩av一区| 欧美视频一区在线| 国产综合久久久久影院| 亚洲欧美另类久久久精品2019| 欧美精品黑人性xxxx| 国产成人av电影在线| 亚洲午夜一二三区视频| 久久久久久97三级| 欧美中文一区二区三区| 国产一区二区在线电影| 亚洲一区日韩精品中文字幕| 精品欧美一区二区在线观看 | 欧美精品一区二区在线观看| a在线播放不卡| 免费在线观看一区二区三区| 一区精品在线播放| 欧美一级久久久| 91成人国产精品| 国产精品一品二品| 三级影片在线观看欧美日韩一区二区| 欧美高清在线精品一区| 欧美一区中文字幕| 91丝袜美女网| 国产激情视频一区二区三区欧美| 亚洲午夜日本在线观看| 国产精品午夜电影| 精品久久一二三区| 欧美日韩一区二区三区不卡| 成人sese在线| 精品中文字幕一区二区小辣椒| 亚洲影视在线播放| 国产精品久久久久久久蜜臀 | 免费高清视频精品| 亚洲欧美日韩在线不卡| 国产欧美日韩视频在线观看| 欧美一区二区网站| 在线观看免费成人| 国产福利91精品一区二区三区| 奇米色一区二区三区四区| 亚洲一区二区在线视频| 中文字幕一区二区三区四区| 久久久激情视频| 日韩午夜精品视频| 欧美日韩国产在线观看| 日本韩国欧美国产| 99精品久久久久久| 国产福利一区二区三区视频| 久久9热精品视频| 秋霞午夜av一区二区三区| 亚洲福利国产精品| 亚洲一区二区视频| 亚洲免费观看高清| 亚洲欧美影音先锋| 国产精品私房写真福利视频| 久久久久久久久久久99999| 精品福利视频一区二区三区| 欧美一区二区三区爱爱| 这里是久久伊人| 欧美精品一卡两卡| 884aa四虎影成人精品一区| 欧美日韩久久久| 欧美日韩国产综合视频在线观看|