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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? netclient.cpp

?? EVC做的Windows Mobile 的H263網(wǎng)絡(luò)視頻
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// NetClient.cpp: implementation of the CNetClient class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NetClient.h"
//#include <fstream.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CNetClient::CNetClient()
{
	IsStart=false;
	bOprUnInit=false;
	m_pProcessRecvData=NULL;
	hSendEvent=CreateEvent(NULL,false,false,NULL);
	hWorkEvent=CreateEvent(NULL,false,false,NULL);
	hExitEvent=CreateEvent(NULL,false,false,NULL);
}
CNetClient::~CNetClient()
{
	CloseHandle(hSendEvent);
	CloseHandle(hWorkEvent);
	CloseHandle(hExitEvent);
}
DWORD _stdcall SendProc(LPVOID pParam)
{
	CNetClient * pNetClient=(CNetClient*) pParam;
	HANDLE event[2];
	event[0]=pNetClient->hSendEvent;
	event[1]=pNetClient->hExitEvent;

	while(true)
	{
		Sleep(1);
		::EnterCriticalSection(&pNetClient->SendMsgQueSection);
		//隊列為空,等待發(fā)送事件觸發(fā)
		if(pNetClient->SendMsgQueue.IsEmpty())
		{
			::LeaveCriticalSection(&pNetClient->SendMsgQueSection);
			//為空,或者發(fā)送完畢
			ResetEvent(pNetClient->hSendEvent);
			TRACE(L"\nTheSendProc Is Waiting....");	
			DWORD Index=::WaitForMultipleObjects(2,event,false,INFINITE);
			if((Index-WAIT_OBJECT_0)==1)return 0L;
		}
		else
		{
			//取下一個結(jié)點(diǎn),并發(fā)送
			MSG_NODE p=pNetClient->SendMsgQueue.DeQueue();
			//釋放隊列
			::LeaveCriticalSection(&pNetClient->SendMsgQueSection);
			DWORD retlen;
			bool bRet=pNetClient->m_sClient.SendMsg(p.pData,p.DataLength,&retlen,WSA_INFINITE);
			if(bRet==false || retlen!=p.DataLength)
			{
				if(GetLastError()!=CLIENT_FUNERROR)
				pNetClient->m_pProcessRecvData(NULL,0,0);
				pNetClient->UnInit();
			}	
		}
	}
	return 0L;
}
DWORD _stdcall WorkProc(LPVOID pParam)
{
	CNetClient* pNetClient=(CNetClient*)pParam;
	HANDLE event[2];
	event[0]=pNetClient->hWorkEvent;
	event[1]=pNetClient->hExitEvent;
	
	while(true)
	{
		Sleep(1);
		::EnterCriticalSection(&pNetClient->RecvMsgQueSection);
		//隊列為空,等待發(fā)送事件觸發(fā)
		if(pNetClient->RecvMsgQueue.IsEmpty())
		{
			::LeaveCriticalSection(&pNetClient->RecvMsgQueSection);
			//為空,或者發(fā)送完畢
			ResetEvent(pNetClient->hWorkEvent);
			TRACE(L"\nTheWorkProc Is Waiting....");			
			DWORD Index=::WaitForMultipleObjects(2,event,false,INFINITE);
			if((Index-WAIT_OBJECT_0)==1)return 0L;
		}
		else
		{
			//取下一個結(jié)點(diǎn),并發(fā)送
			MSG_NODE p=pNetClient->RecvMsgQueue.DeQueue();
			//釋放隊列
			::LeaveCriticalSection(&pNetClient->RecvMsgQueSection);
			//調(diào)用回調(diào)函數(shù),處理數(shù)據(jù)
			pNetClient->m_pProcessRecvData(p.pData,p.DataLength,pNetClient->m_dwUserData);
		}
	}
	return 0L;
}
DWORD _stdcall RecvProc(LPVOID pParam)
{
	CNetClient * pNetClient=(CNetClient*)pParam;
	char RecvBuf[BUFFER_SIZE];
	DWORD retlen;
	while (true)
	{
		Sleep(1);
		TRACE(L"\nTheRecvThread Is Waiting...");
		if(!pNetClient->m_sClient.RecvMsg(RecvBuf,BUFFER_SIZE,&retlen,WSA_INFINITE) &&  GetLastError()!=CLIENT_FUNERROR)
		{
			if(pNetClient->bOprUnInit)return 0L;//應(yīng)用程序請求退出	
			//連接已經(jīng)被斷開,通知上層(通過調(diào)用回調(diào)函數(shù))
			pNetClient->m_pProcessRecvData(NULL,0,0);
			pNetClient->UnInit();
			return 0L;
		}
		else
		{
			//沒收到字節(jié)?還是出錯
			if(retlen==0)
			{
				pNetClient->m_pProcessRecvData(NULL,0,0);
				pNetClient->UnInit();
				return 0L;
			}
			//將接收到的數(shù)據(jù)放到接收隊列里
			MSG_NODE Msg;
			Msg.DataLength=retlen;
			memcpy(Msg.pData,RecvBuf,retlen);
			//插入消息隊列
			::EnterCriticalSection(&pNetClient->RecvMsgQueSection);
			if(pNetClient->SendMsgQueue.IsEmpty())
			{
				pNetClient->RecvMsgQueue.EnQueue(Msg);
				::LeaveCriticalSection(&pNetClient->RecvMsgQueSection);
				//如果消息隊列為空,告訴工作線程可以進(jìn)行工作了
				SetEvent(pNetClient->hWorkEvent);
			}
			else
			{
				pNetClient->RecvMsgQueue.EnQueue(Msg);
				::LeaveCriticalSection(&pNetClient->RecvMsgQueSection);
			}
		}
	}
	return 0L;
}
bool CNetClient::Init(ProcessRecvData* pProcessRecvData,LPCSTR szSvrAddr, unsigned long iSvrPort,DWORD userdata)
{
	if(pProcessRecvData==NULL //回調(diào)函數(shù)空
		|| szSvrAddr==NULL //地址空
		|| IsStart)//已經(jīng)啟動過了
		return false;	
	::InitializeCriticalSection(&SendMsgQueSection);
	::InitializeCriticalSection(&RecvMsgQueSection);	
	IsStart=false;
	bOprUnInit=false;
	m_pProcessRecvData=pProcessRecvData;
	m_dwUserData=userdata;
	int  bRet=InitNetWork(szSvrAddr,iSvrPort,HostIpAddr);
	if(0==bRet)
	{
		IsStart=true;
		return true;
	}
	else
		return false;
}
void CNetClient::UnInit()
{
	if(!IsStart)return;
	bOprUnInit=true;
	SetEvent(hExitEvent);	
	SetEvent(hExitEvent);
	m_sClient.UnInit();	
	::DeleteCriticalSection(&SendMsgQueSection);
	::DeleteCriticalSection(&RecvMsgQueSection);
	SendMsgQueue.MakeEmpty();
	RecvMsgQueue.MakeEmpty();	
	m_pProcessRecvData=NULL;
	IsStart=false;
}
int CNetClient::InitNetWork(LPCSTR szSvrAddr,unsigned int SvrPort,LPCSTR pHostIpAddress)
{
	CString LogStr;
	int Error=0;
	WSADATA wsaData;
	char Name[100];
	hostent *pHostEntry;
	in_addr rAddr;
	memset((void *)pHostIpAddress,0,sizeof(pHostIpAddress));
	//Net Start Up
	Error=WSAStartup(MAKEWORD(0x02,0x02),&wsaData);
	if(Error!=0)
	{
		Error = WSAGetLastError();
		LogStr.Format(L"WSAStartUp Faild With Error: %d",Error);
		WriteLogString(LogStr);

		return Error;
	}
	//Make Version
	if ( LOBYTE( wsaData.wVersion ) != 2 ||
         HIBYTE( wsaData.wVersion ) != 2 )
	{
		WSACleanup( );
		
		//WriteLogString("The Local Net Version Is not 2");

		return -1;
	}
	//Get Host Ip
	Error = gethostname ( Name, sizeof(Name) );
	if( 0 == Error )
	{
		pHostEntry = gethostbyname( Name );
		if( pHostEntry != NULL )
		{
			memcpy( &rAddr, pHostEntry->h_addr_list[0], sizeof(struct in_addr) );
			sprintf((char * )pHostIpAddress,"%s",inet_ntoa( rAddr ));
		}
		else
		{
			Error = WSAGetLastError();
			LogStr.Format(L"GetHostIp faild with Error: %d",Error);
			//WriteLogString(LogStr);

		}
	}
	else
	{
		Error = WSAGetLastError();
		LogStr.Format(L"gethostname faild with Error: %d",Error);
		//WriteLogString(LogStr);
	}
	//Socket Create
	if(0==Error)
	{
		if(!m_sClient.CreateSocket(SOCK_STREAM))
		{
			Error=WSAGetLastError();
			LogStr.Format(L"Create Client Socket Faild :%d",Error);
			//WriteLogString(LogStr);
			return Error;
		}
	}
	if(0==Error)
	{
		if(!m_sClient.ConnectSocket((char *)szSvrAddr,SvrPort))
		{
			Error=WSAGetLastError();
			LogStr.Format(L"Create Client Socket Faild :%d",Error);
			WriteLogString(LogStr);
			return Error;
		}
	}
	//啟動工作線程,并升高工作線程的等級至最高
	if(0==Error)
	{
		HANDLE WorkHan=0;
		unsigned long WorkID;
		if((WorkHan=CreateThread(NULL,0,WorkProc,this,0,&WorkID))==NULL)
		{
			Error=GetLastError();
			LogStr.Format(L"Create WorkThread Faild With Error %d",Error);
			WriteLogString(LogStr);
			return Error;
		}
		SetThreadPriority(WorkHan,THREAD_PRIORITY_HIGHEST);
		CloseHandle(WorkHan);
	}
	//啟動接收線程
	if(0==Error)
	{
		HANDLE RecvHan=0;
		unsigned long RecvID;
		if((RecvHan=CreateThread(NULL,0,RecvProc,this,0,&RecvID))==NULL)
		{
			Error=GetLastError();
			LogStr.Format(L"Create RecvThread Faild With Error %d",Error);
			WriteLogString(LogStr);
			SetEvent(hExitEvent);//退出先前創(chuàng)建的線程
			return Error;
		}
		CloseHandle(RecvHan);
	}
	//啟動發(fā)送線程
	if(0==Error)
	{
		HANDLE ThreHan;
		unsigned long ThrID;
		if((ThreHan=CreateThread(NULL,0,SendProc,this,0,&ThrID))==NULL)
		{
			Error=GetLastError();
			LogStr.Format(L"Create SEND Thred Faild With Error %d",Error);
			WriteLogString(LogStr);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区视频| 精品久久久久久久久久久院品网 | 国产夫妻精品视频| 欧美一区二区三区的| 久久 天天综合| 亚洲国产经典视频| 日本福利一区二区| 日韩精品一二区| 亚洲精品一区二区在线观看| 成人污污视频在线观看| 日韩伦理av电影| 欧美三级韩国三级日本一级| 久久精工是国产品牌吗| 国产日韩精品一区二区三区在线| 94色蜜桃网一区二区三区| 亚洲h动漫在线| 久久综合999| 在线免费观看日本一区| 免费人成在线不卡| 中文字幕乱码久久午夜不卡| 欧美性色黄大片| 美国欧美日韩国产在线播放| 国产精品动漫网站| 制服视频三区第一页精品| 国产精品综合网| 亚洲一区二区欧美| 久久久久久久久久久电影| 欧美自拍偷拍一区| 国产剧情一区二区三区| 亚洲一区二区三区小说| 精品国产乱码久久久久久牛牛| 99re66热这里只有精品3直播 | 国产三级久久久| 欧美调教femdomvk| 国产在线一区二区| 亚洲午夜免费视频| 国产精品久久久久久久久免费相片| 欧美一卡二卡在线观看| 成人一区二区三区| 蜜臀精品久久久久久蜜臀| 亚洲精品免费在线| 久久女同互慰一区二区三区| 欧美日韩高清不卡| a4yy欧美一区二区三区| 国产一区二区三区黄视频 | 日韩电影网1区2区| 中文字幕一区日韩精品欧美| 精品裸体舞一区二区三区| 色丁香久综合在线久综合在线观看| 久久99精品视频| 亚洲大片在线观看| 亚洲精品美国一| 中文在线一区二区 | 欧美日韩一区 二区 三区 久久精品| 国产精品资源网站| 精品一区二区在线播放| 日韩精品五月天| 一区二区成人在线视频| 国产精品不卡在线观看| 国产欧美一区二区三区网站| 精品国产sm最大网站| 欧美理论片在线| 欧美少妇xxx| 欧美视频你懂的| 欧美性大战久久久| 色老综合老女人久久久| 99re这里只有精品视频首页| 99综合电影在线视频| 成人性视频网站| av成人老司机| 91亚洲午夜精品久久久久久| 92精品国产成人观看免费| jlzzjlzz欧美大全| 成人黄页毛片网站| 国产99久久久国产精品潘金网站| 国产永久精品大片wwwapp| 国产尤物一区二区在线| 国产精品538一区二区在线| 国产精品一区二区果冻传媒| 国产乱国产乱300精品| 国产成人综合在线观看| 成人福利在线看| 91在线观看地址| 在线视频综合导航| 欧美日韩黄色影视| 欧美一区国产二区| 久久欧美一区二区| 国产精品无遮挡| 亚洲欧美日韩国产手机在线| 一区二区三区美女视频| 午夜精品福利一区二区蜜股av| 日韩国产欧美在线观看| 精品午夜久久福利影院| 国产精品一区二区x88av| 国产成人精品午夜视频免费| 91视频免费播放| 欧美日韩综合一区| 337p日本欧洲亚洲大胆精品 | 亚洲免费av网站| 亚洲伊人伊色伊影伊综合网| 三级欧美在线一区| 韩国欧美国产1区| 91麻豆免费视频| 欧美日韩极品在线观看一区| 亚洲精品一区二区三区福利| 中文字幕精品三区| 亚洲成a人在线观看| 精品一区在线看| 91美女片黄在线观看91美女| 欧美一区二区三区爱爱| 亚洲国产成人午夜在线一区 | 久久福利视频一区二区| 粉嫩绯色av一区二区在线观看| 欧美亚州韩日在线看免费版国语版| 这里只有精品电影| 国产欧美一区视频| 午夜日韩在线观看| 国产精品66部| 欧美日本一区二区| 国产亚洲一本大道中文在线| 一级中文字幕一区二区| 国产精品综合一区二区三区| 欧日韩精品视频| 久久精品夜色噜噜亚洲a∨| 一区二区三区在线高清| 国产精品一卡二卡在线观看| 欧美日韩电影在线| 国产精品美女久久久久久2018| 爽好多水快深点欧美视频| av在线播放不卡| 欧美成人aa大片| 天天色天天操综合| 色偷偷一区二区三区| 国产日韩精品视频一区| 日本午夜精品视频在线观看| 色天天综合久久久久综合片| 久久久久久久久久久黄色| 蜜桃精品在线观看| 欧美三级日韩三级| 亚洲人成精品久久久久| 国产99久久久国产精品免费看| 精品捆绑美女sm三区| 婷婷成人综合网| 欧美性猛交xxxxxx富婆| 自拍偷拍欧美精品| 大胆亚洲人体视频| 久久久噜噜噜久久中文字幕色伊伊| 天天影视色香欲综合网老头| 色香蕉成人二区免费| 国产精品久久午夜夜伦鲁鲁| 国产在线不卡一卡二卡三卡四卡| 日韩一区二区三区免费观看| 亚洲午夜影视影院在线观看| 91香蕉视频污在线| 国产精品久久久久久亚洲毛片| 国产一区二区三区免费在线观看| 欧美变态tickling挠脚心| 日本不卡在线视频| 欧美一二区视频| 免费视频最近日韩| 日韩一级免费观看| 青青草97国产精品免费观看无弹窗版 | 成人app在线| 欧美国产精品中文字幕| 国产电影一区二区三区| 国产日产亚洲精品系列| 国产v日产∨综合v精品视频| 久久精品水蜜桃av综合天堂| 国产精品系列在线播放| 中文字幕欧美激情| 不卡一区二区三区四区| 亚洲手机成人高清视频| 94色蜜桃网一区二区三区| 亚洲精品videosex极品| 欧美中文字幕一区| 视频一区中文字幕国产| 91精品国产综合久久蜜臀| 免费欧美高清视频| 精品免费视频一区二区| 国产99精品在线观看| 亚洲欧美一区二区三区久本道91| 欧美综合亚洲图片综合区| 日韩—二三区免费观看av| 日韩精品综合一本久道在线视频| 国产美女娇喘av呻吟久久| 国产精品精品国产色婷婷| 91偷拍与自偷拍精品| 亚洲v日本v欧美v久久精品| 欧美一区二区三区免费| 国产成人亚洲综合色影视| 亚洲欧美日韩国产成人精品影院| 欧美日韩精品专区| 激情伊人五月天久久综合| 中文字幕不卡三区| 欧美丝袜丝nylons| 老司机精品视频在线| 欧美国产欧美综合| 欧美日韩国产乱码电影| 国产精品中文字幕日韩精品 | 欧美一区二区三区四区在线观看|