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

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

?? netclient.cpp

?? EVC做的Windows Mobile 的H263網絡視頻
?? 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);
		//隊列為空,等待發送事件觸發
		if(pNetClient->SendMsgQueue.IsEmpty())
		{
			::LeaveCriticalSection(&pNetClient->SendMsgQueSection);
			//為空,或者發送完畢
			ResetEvent(pNetClient->hSendEvent);
			TRACE(L"\nTheSendProc Is Waiting....");	
			DWORD Index=::WaitForMultipleObjects(2,event,false,INFINITE);
			if((Index-WAIT_OBJECT_0)==1)return 0L;
		}
		else
		{
			//取下一個結點,并發送
			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);
		//隊列為空,等待發送事件觸發
		if(pNetClient->RecvMsgQueue.IsEmpty())
		{
			::LeaveCriticalSection(&pNetClient->RecvMsgQueSection);
			//為空,或者發送完畢
			ResetEvent(pNetClient->hWorkEvent);
			TRACE(L"\nTheWorkProc Is Waiting....");			
			DWORD Index=::WaitForMultipleObjects(2,event,false,INFINITE);
			if((Index-WAIT_OBJECT_0)==1)return 0L;
		}
		else
		{
			//取下一個結點,并發送
			MSG_NODE p=pNetClient->RecvMsgQueue.DeQueue();
			//釋放隊列
			::LeaveCriticalSection(&pNetClient->RecvMsgQueSection);
			//調用回調函數,處理數據
			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;//應用程序請求退出	
			//連接已經被斷開,通知上層(通過調用回調函數)
			pNetClient->m_pProcessRecvData(NULL,0,0);
			pNetClient->UnInit();
			return 0L;
		}
		else
		{
			//沒收到字節?還是出錯
			if(retlen==0)
			{
				pNetClient->m_pProcessRecvData(NULL,0,0);
				pNetClient->UnInit();
				return 0L;
			}
			//將接收到的數據放到接收隊列里
			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);
				//如果消息隊列為空,告訴工作線程可以進行工作了
				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 //回調函數空
		|| szSvrAddr==NULL //地址空
		|| IsStart)//已經啟動過了
		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);//退出先前創建的線程
			return Error;
		}
		CloseHandle(RecvHan);
	}
	//啟動發送線程
	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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费av| 国产亚洲欧美中文| 欧美午夜精品免费| 欧美日韩精品综合在线| 91精品国产黑色紧身裤美女| 91精品1区2区| 在线播放/欧美激情| 91精品欧美福利在线观看| 欧美一级二级三级蜜桃| 久久久久久免费毛片精品| 国产亚洲成年网址在线观看| 国产精品女上位| 亚洲欧美国产高清| 午夜久久久久久久久久一区二区| 三级不卡在线观看| 99精品视频在线免费观看| 色综合久久久久网| 欧美成人猛片aaaaaaa| 精品久久一二三区| 一区二区成人在线| 国产另类ts人妖一区二区| 99久久er热在这里只有精品15| 欧美中文字幕亚洲一区二区va在线| 色婷婷av一区二区| 久久亚洲一区二区三区明星换脸| 久久精品亚洲乱码伦伦中文| 日本va欧美va精品发布| 91一区二区三区在线观看| 日韩欧美国产不卡| 亚洲自拍与偷拍| 91在线看国产| 国产精品久久一卡二卡| 久久99久久99精品免视看婷婷 | 黑人巨大精品欧美黑白配亚洲| 成人免费不卡视频| 日韩精品专区在线影院重磅| 亚洲精品欧美在线| 成人午夜精品在线| 日韩你懂的在线播放| 1024成人网| 国产在线精品一区二区不卡了 | 欧美日韩一二三区| 亚洲青青青在线视频| 国内精品免费**视频| 日韩一区二区三区精品视频 | 久久99热狠狠色一区二区| 欧美日韩一区国产| 亚洲一区二区三区四区在线| 国产精品1024久久| 日韩精品中文字幕在线一区| 日韩av不卡在线观看| 欧美日韩高清不卡| 婷婷六月综合网| 欧美一区永久视频免费观看| 视频一区视频二区中文| 2021中文字幕一区亚洲| 粉嫩一区二区三区在线看| 自拍偷拍国产精品| 欧美一二三区在线观看| 九色|91porny| 国产精品色噜噜| 777色狠狠一区二区三区| 精彩视频一区二区三区| 欧美国产禁国产网站cc| 日本韩国欧美在线| 免费人成精品欧美精品| 久久青草欧美一区二区三区| www.99精品| 天堂一区二区在线| 欧美精品一区二| 高清shemale亚洲人妖| 久久国内精品视频| 亚洲精品ww久久久久久p站| 欧美精品一区二区三区很污很色的| 国内成人免费视频| 有码一区二区三区| 日韩一二三区不卡| 一道本成人在线| 国产一区二区三区在线观看免费视频 | 麻豆一区二区99久久久久| 一区二区三区国产| 中文字幕一区二区三区四区不卡| 日韩一区二区中文字幕| 欧美精品自拍偷拍| 91捆绑美女网站| 国产福利不卡视频| 美女诱惑一区二区| 亚洲福利视频一区| 日本午夜精品视频在线观看 | 国产偷国产偷亚洲高清人白洁| 在线播放视频一区| 色吧成人激情小说| 欧美性videosxxxxx| 欧洲精品在线观看| 欧美精品免费视频| 日韩欧美视频在线| 久久免费视频色| 国产精品国产三级国产aⅴ中文 | 精品日韩av一区二区| 国产欧美精品一区二区色综合朱莉| 久久日一线二线三线suv| 国产农村妇女毛片精品久久麻豆 | 亚洲一区二区三区四区的| 亚洲精品一二三四区| 免费成人美女在线观看.| 国产成人免费在线视频| 在线观看日韩高清av| 7777精品伊人久久久大香线蕉完整版| 日韩欧美国产系列| 国产精品久久久久一区二区三区| 亚洲男同性视频| 青青草97国产精品免费观看无弹窗版| 美女诱惑一区二区| 欧美日韩国产综合一区二区| 国产肉丝袜一区二区| 亚洲成a人片在线不卡一二三区| 久久精品国内一区二区三区| 成人福利电影精品一区二区在线观看| 日韩一区二区免费在线电影 | 亚洲一区二区高清| av电影一区二区| 国产亚洲精久久久久久| 日本中文字幕一区| 91极品视觉盛宴| 欧美tickling网站挠脚心| 天堂久久久久va久久久久| 99精品欧美一区| 日韩欧美www| 国产精品亚洲第一区在线暖暖韩国| 91啦中文在线观看| 亚洲一区在线观看免费| 欧美三级韩国三级日本一级| 亚洲天堂成人在线观看| 高清国产一区二区| 久久天堂av综合合色蜜桃网| 麻豆91在线看| 精品国产乱码久久久久久夜甘婷婷| 亚洲夂夂婷婷色拍ww47| 欧美日韩一区高清| 麻豆视频观看网址久久| 久久亚洲综合av| 欧美在线观看一二区| 亚洲女同ⅹxx女同tv| 日韩视频国产视频| 激情偷乱视频一区二区三区| 精品国产凹凸成av人导航| 男人的天堂久久精品| 日韩三级电影网址| 色综合久久久久久久| 免费久久99精品国产| 精品国产乱码久久久久久老虎| 激情亚洲综合在线| 亚洲天天做日日做天天谢日日欢| 色综合天天综合色综合av | 一区二区三区电影在线播| 成人国产精品免费观看动漫| 亚洲视频一区二区在线| 欧美精品国产精品| 国产精品香蕉一区二区三区| 尤物av一区二区| 久久无码av三级| 欧美无砖砖区免费| 天天综合网天天综合色| 精品久久久久久久人人人人传媒| 国产精品主播直播| 香蕉成人啪国产精品视频综合网| 欧美va亚洲va| 欧美午夜电影网| 不卡视频在线观看| 男女男精品视频网| 亚洲成人777| 一区二区三区美女| 欧美激情一区二区三区不卡| 91精品国产综合久久婷婷香蕉| 不卡的av电影在线观看| 老司机午夜精品| 日韩激情视频在线观看| 亚洲精品高清在线| 亚洲靠逼com| 夜夜嗨av一区二区三区四季av| 国产欧美va欧美不卡在线| 日韩女优av电影| 精品国产三级a在线观看| 日韩欧美在线1卡| 日韩午夜av一区| 日韩视频一区二区三区在线播放 | 亚洲免费视频中文字幕| 亚洲美女免费在线| 亚洲在线观看免费| 亚洲一区在线电影| 久久久噜噜噜久久中文字幕色伊伊 | 国产盗摄视频一区二区三区| 国产成人午夜视频| 国产成人精品三级麻豆| 91尤物视频在线观看| 亚洲精品一区二区三区精华液| 午夜激情久久久| 欧美日韩国产色站一区二区三区| 亚洲人一二三区| 91丝袜美腿高跟国产极品老师|