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

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

?? udp_ce.cpp

?? wince.net 下的UDP網絡程序的源代碼
?? CPP
字號:
// UDP_CE.cpp: implementation of the CUDP_CE class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "UDPDemo.h"
#include "UDP_CE.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CUDP_CE::CUDP_CE()
{
	
}

CUDP_CE::~CUDP_CE()
{
	
}


/*
*函數介紹:打開UDP通訊端口
*入口參數:pWnd: 指定父窗體指針 
           localPort: 指定遠程UDP端口
           romoteHost:指定遠程IP地址
           remotePort:指定遠程UDP端口
*出口參數:(無)
*返回值:1代表成功;-1,-2,-3等都代表失敗
*/
DWORD CUDP_CE::Open(CWnd* pWnd,int localPort,LPCTSTR remoteHost,int remotePort)
{
	
	WSADATA wsa;
	
	m_pOwnerWnd = pWnd;
	
	//加載winsock動態鏈接庫
	if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
	{
		return -1;//代表失敗
	}
	
	//創建UDP套接字
	m_UDPSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
	if (m_UDPSocket == INVALID_SOCKET)
	{
		return -2;
	}
	
	SOCKADDR_IN localAddr;
	localAddr.sin_family = AF_INET;
	localAddr.sin_port = htons(localPort);
	localAddr.sin_addr.s_addr=INADDR_ANY;
	
	//綁定地址
	if(bind(m_UDPSocket,(sockaddr*)&localAddr,sizeof(localAddr))!=0)
	{
		return -3;
	}
	
	
	//設置非堵塞通訊
	DWORD ul= 1;
	ioctlsocket(m_UDPSocket,FIONBIO,&ul);

	//創建一個線程退出事件
	m_ExitThreadEvent	= CreateEvent(NULL,TRUE,FALSE,NULL);
	
	//創建通訊線程
	AfxBeginThread(RecvThread,this);
	
	m_RemoteAddr.sin_family = AF_INET;
	m_RemoteAddr.sin_port = htons(remotePort);
	//此處要將雙字節轉換成單字節
	char ansiRemoteHost[255];
	ZeroMemory(ansiRemoteHost,255);
	WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,remoteHost,wcslen(remoteHost)
		,ansiRemoteHost,wcslen(remoteHost),NULL,NULL);
	m_RemoteAddr.sin_addr.s_addr=inet_addr(ansiRemoteHost);
	return 1;
}

/*
*函數介紹:關閉UDP通訊端口
*入口參數:(無)
*出口參數:(無)
*返 回 值:1代表成功;-1,-2等都代表失敗
*/
DWORD CUDP_CE::Close(void)
{
	//設置通訊線程退出事件,通知線程退出
	SetEvent(m_ExitThreadEvent);
	Sleep(2000);
	//關閉線程句柄
	CloseHandle(m_ExitThreadEvent);
	//關閉socket
	if (closesocket(m_UDPSocket) == SOCKET_ERROR)
	{
		return -1;
	}
	
	//釋放socket資源
	if (WSACleanup() == SOCKET_ERROR)
	{
		return -2;
	}
	return 1;
}

/*
*函數介紹:發送數據
*入口參數:dataPriority: 數據優先級 
           dataType: 數據類型
           buf:緩沖區數據
           len:緩沖數據長度
*出口參數:(無)
*返回值:發送成功代表實際發送的字節數,否則返回-1
*/
DWORD CUDP_CE::SendData(const char *buf, int len)
{
	int nBytes = 0;
	int nSendBytes=0;
	int nSumBytes =0; 
	int nErrorCode;
	
	UDPData sendData;
	CopyMemory(sendData.FrameHead,FRAMEHEAD,4);
	sendData.DataPackageLen = len;
	CopyMemory(sendData.FrameTail,FRAMETAIL,4);
	
	nSumBytes = len + 12;	
	
	char * sendBuf;
	sendBuf = new char[nSumBytes];
	CopyMemory(sendBuf,sendData.FrameHead,4);
	CopyMemory(sendBuf+4,&(sendData.DataPackageLen),4);
	CopyMemory(sendBuf+8,buf,len);
	CopyMemory(sendBuf+8+len,sendData.FrameTail,4);
	
	//發送數據
	while (nSendBytes < nSumBytes)
	{
		nBytes = sendto(m_UDPSocket,sendBuf+nSendBytes,nSumBytes-nSendBytes,0,(sockaddr*)&m_RemoteAddr,sizeof(m_RemoteAddr));
		if (nBytes==SOCKET_ERROR )
		{
			nErrorCode = WSAGetLastError();
			m_OnUdpError(m_pOwnerWnd,nErrorCode);
			return -1;
		}
		if (nSendBytes == nSumBytes)
		{
			break;
		}
		Sleep(1000);
		nSendBytes = nSendBytes + nBytes;
	}
	delete[] sendBuf;
	return nSendBytes;
}


/*
*函數介紹:接收線程函數
*入口參數:lparam : 指傳進線程的參數
*出口參數:(無)
*返 回 值:無意義。
*/
UINT CUDP_CE::RecvThread(LPVOID lparam)
{
	CUDP_CE *pSocket;
	pSocket = (CUDP_CE*)lparam;
	fd_set fdRead;
	int ret;
	TIMEVAL	aTime;
	char * recvBuf=NULL;
	aTime.tv_sec = 1;
	aTime.tv_usec = 0;
	SOCKADDR_IN tmpAddr;
	int tmpRecvLen;
	int recvLen;
	int iErrorCode;
	
	char * recvedBuf = NULL;
	int recvedBufLen;
	
	while (TRUE)
	{
		
        //收到退出事件,結束線程
		if (WaitForSingleObject(pSocket->m_ExitThreadEvent,0) == WAIT_OBJECT_0)
		{
			break;
		}

		//將set初始化空集合
		FD_ZERO(&fdRead);
		
		//將pSocket->m_UDPSocket套接字添加到集合中
		FD_SET(pSocket->m_UDPSocket,&fdRead);
		
		//調用select函數,判斷套接字I/O狀態
		ret = select(0,&fdRead,NULL,NULL,&aTime);
		
		if (ret == SOCKET_ERROR)
		{
			iErrorCode = WSAGetLastError();
			pSocket->m_OnUdpError(pSocket->m_pOwnerWnd,iErrorCode);
			break;
		}
		
		if (ret > 0)
		{
			if (FD_ISSET(pSocket->m_UDPSocket,&fdRead))
			{
				
                tmpAddr.sin_family=AF_INET;             
                tmpAddr.sin_port = htons(pSocket->m_RemoteAddr.sin_port);
				tmpAddr.sin_addr.s_addr =INADDR_ANY;
                tmpRecvLen = sizeof(tmpAddr);
				
				
				recvBuf = new char[1024];
				recvedBuf = new char[1024];
				ZeroMemory(recvBuf,1024);
				ZeroMemory(recvedBuf,1024);
				recvLen = recvfrom(pSocket->m_UDPSocket,recvBuf, 1024,0,(SOCKADDR*)&tmpAddr,&tmpRecvLen); 
				if (recvLen == SOCKET_ERROR)
				{
					iErrorCode = WSAGetLastError();
					pSocket->m_OnUdpError(pSocket->m_pOwnerWnd,iErrorCode);
					break;
				}
				else if (recvLen == 0)
				{
					iErrorCode = WSAGetLastError();
					pSocket->m_OnUdpError(pSocket->m_pOwnerWnd,iErrorCode);	
					break;
				}
				else
				{
					//此處添加解析程序,將接收到的數據解析后,
                    
					if (pSocket->HandlePackage(recvBuf,recvLen,recvedBuf,recvedBufLen))
					{
						pSocket->m_OnUdpRecv(pSocket->m_pOwnerWnd,recvedBuf,recvedBufLen,(SOCKADDR*)&tmpAddr);
					}
					delete []recvBuf;
					recvBuf = NULL;
					delete []recvedBuf;
					recvedBuf = NULL;
				}
				
			}
		}
	}
	return 0;
}

/*
*函數介紹:處理接收到的數據包
*入口參數:inBuf: 待處理的緩沖區
           inBufLen:待處理的緩沖區長度
*出口參數:dataPriority:數據優先級
           dataType:數據類型
           outBuf:處理后的緩沖區數據
           outBufLen:處理后的緩沖區數據長度
*返 回 值:合法則返回true,否則,返回false;
*/
bool CUDP_CE::HandlePackage(const char *inBuf,int inBufLen
							,char *outBuf,int &outBufLen)
{
	CString csBuf;
	csBuf = inBuf;
	int iPosHead = pos(FRAMEHEAD,inBuf,inBufLen);
	int iPosTail = pos(FRAMETAIL,inBuf,inBufLen);
	//沒有查到包頭或包尾
	if ((iPosHead == -1) || (iPosTail == -1))
	{
		return FALSE;
	}
	//如果包頭位置大于等于包尾位置,就退出
	if (iPosHead >= iPosTail)
	{
		return FALSE;
	}
	//得到數據包長度
	int iPackLen;
	CopyMemory(&iPackLen,inBuf+iPosHead+4,4);
	//判斷包長度是否正確
	if (iPackLen != iPosTail - iPosHead - 8)
	{
		return FALSE;
	}
	
	CopyMemory(outBuf,inBuf+8,iPackLen);
	outBufLen = iPackLen;
	return TRUE;
}

/*
*函數介紹:查找一個字符串的位置
*入口參數:aSubStr: 待查找的子串
           aBuf:待查找的緩沖區
           len:待查找的緩沖區長度
*出口參數:(無)
*返回值:找到的話,返回在父串中的位置,否則返回-1.
*/
int CUDP_CE::pos(LPCSTR aSubStr, const char *aBuf, int len)
{
	bool aResult = TRUE;
	int subLen = strlen(aSubStr);
    for ( int i=0;i<len-subLen+1;i++)
	{
		aResult = TRUE;
		for (int j=0;j<subLen;j++)
		{
			if (*(aBuf+i+j) != aSubStr[j])
			{
				aResult = FALSE;
				break;
			}
			int k = 0;
		}
		if (aResult)
		{
			return i;
		}
	}
	return -1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩女优av电影| 91在线国内视频| 亚洲精品国产一区二区精华液 | 欧美精品第一页| 91婷婷韩国欧美一区二区| 丁香另类激情小说| 国产91色综合久久免费分享| 久久国产欧美日韩精品| 韩国毛片一区二区三区| 国产自产v一区二区三区c| 国产一区二区精品久久99| 国产一区二区在线看| 国产成人综合亚洲网站| 成人avav在线| 色婷婷久久99综合精品jk白丝| 99久久婷婷国产精品综合| 91年精品国产| 欧美日韩在线亚洲一区蜜芽| 欧美理论电影在线| 精品粉嫩超白一线天av| 26uuu欧美| 亚洲免费在线看| 国产精品青草综合久久久久99| 欧美韩国日本不卡| 亚洲免费在线电影| 日本成人在线电影网| 久久草av在线| 99精品在线观看视频| 欧美综合久久久| 日韩欧美黄色影院| 国产蜜臀97一区二区三区| 亚洲色图欧美在线| 日本视频一区二区| 国产成人一区在线| 欧美日韩中文另类| 久久久无码精品亚洲日韩按摩| 国产精品视频观看| 日韩在线播放一区二区| 国产福利一区二区三区视频| 一本到一区二区三区| 日韩美一区二区三区| 欧美国产日本韩| 午夜精品福利视频网站| 国产91丝袜在线观看| 91精品久久久久久久91蜜桃| 国产日产精品1区| 午夜精品福利一区二区三区av | 日韩成人伦理电影在线观看| 丁香天五香天堂综合| 欧美日韩mp4| 亚洲欧美日韩在线| 国产精品一区在线观看你懂的| 欧洲色大大久久| 亚洲国产精品传媒在线观看| 日韩国产欧美在线视频| 色94色欧美sute亚洲线路二| 久久久精品国产免大香伊| 午夜av一区二区三区| av日韩在线网站| 欧美韩国日本综合| 国内精品久久久久影院一蜜桃| 91成人免费在线视频| 国产精品三级电影| 国产专区欧美精品| 精品国产自在久精品国产| 亚洲成人一区二区在线观看| 色综合一区二区| 国产精品五月天| 国产精品一区久久久久| 日韩欧美国产系列| 麻豆精品视频在线观看视频| 欧美日韩一区二区在线观看视频| 国产精品麻豆欧美日韩ww| 国产精品99久久久久久久vr| 日韩精品在线一区二区| 日本va欧美va精品发布| 91精品国产色综合久久久蜜香臀| 一区二区在线看| 91久久线看在观草草青青| 国产精品第五页| 97久久久精品综合88久久| 欧美高清在线视频| 成人黄色网址在线观看| 国产精品美日韩| 91日韩在线专区| 亚洲精品国产品国语在线app| 97久久精品人人爽人人爽蜜臀| 亚洲色图色小说| 欧美日韩一区三区| 日韩不卡一二三区| 久久久久成人黄色影片| 粉嫩绯色av一区二区在线观看| 国产精品久久久久久久久图文区| 成人丝袜高跟foot| 一个色在线综合| 欧美丰满嫩嫩电影| 国产一区在线视频| 亚洲欧美在线观看| 91麻豆精品国产91久久久更新时间 | 日本欧美久久久久免费播放网| 在线播放一区二区三区| 久久99热这里只有精品| 中文字幕不卡的av| 欧美色综合影院| 精品一区二区久久久| 国产精品午夜在线观看| 色诱亚洲精品久久久久久| 亚洲综合一区在线| 欧美另类久久久品| 久久99精品久久久久久国产越南 | 图片区小说区国产精品视频| 欧美日本免费一区二区三区| 国产精品国产精品国产专区不片| 欧美日韩一区二区在线观看视频| 五月天久久比比资源色| 欧美mv日韩mv国产网站| 粉嫩13p一区二区三区| 国产精品成人午夜| 色综合夜色一区| 国产毛片一区二区| 亚洲视频免费观看| 在线不卡欧美精品一区二区三区| 精品综合免费视频观看| 国产精品萝li| 欧美系列日韩一区| www.久久久久久久久| 香蕉成人啪国产精品视频综合网| 日韩精品一区二区三区四区视频| 成人做爰69片免费看网站| ...中文天堂在线一区| 在线观看免费视频综合| 国产麻豆成人精品| 国产性做久久久久久| 欧美日本在线观看| 懂色av一区二区在线播放| 精品伊人久久久久7777人| 亚洲欧美综合在线精品| 欧美一区二区在线免费观看| 99久久国产免费看| 激情综合网av| 精品一区二区三区在线视频| 一区二区三区四区蜜桃| 久久婷婷综合激情| 欧美高清你懂得| 99久久精品国产观看| 国内外成人在线视频| 天堂久久久久va久久久久| 自拍偷自拍亚洲精品播放| 2023国产一二三区日本精品2022| 欧美日韩综合不卡| 色狠狠综合天天综合综合| 成人av电影免费观看| 国产精品一区二区无线| 免费欧美高清视频| 亚洲一区二区三区国产| 国产精品久久久久久久久免费樱桃 | 国产精品天美传媒沈樵| 欧美成人欧美edvon| 欧美在线小视频| 91视频免费播放| 99在线精品视频| 日本高清不卡一区| 91丝袜国产在线播放| 成人免费观看男女羞羞视频| 国产一区二区三区免费观看| 精品在线观看视频| 亚洲第一电影网| 美女网站在线免费欧美精品| 亚洲va欧美va天堂v国产综合| 一区二区三区在线视频免费| 国产精品久久久久久久久图文区 | 日韩成人av影视| 国产精品久久久久一区| 欧美videofree性高清杂交| 精品久久久三级丝袜| 67194成人在线观看| 91麻豆精品国产综合久久久久久| 欧美色男人天堂| 91精品国产欧美一区二区| 精品粉嫩aⅴ一区二区三区四区| 日韩欧美成人一区二区| 久久色中文字幕| 欧美—级在线免费片| 亚洲欧洲成人av每日更新| 日韩一区二区三区电影在线观看 | 日韩精品一区二区三区老鸭窝| 欧美成人一区二区| 精品美女被调教视频大全网站| 精品久久久久久无| 久久精品免费在线观看| 日韩欧美专区在线| 久久久久久久久久电影| 亚洲18影院在线观看| 精品一区二区三区在线观看| 成人av网站在线观看免费| 在线精品视频一区二区| 日韩一级片网址| 一区二区久久久久| 美女视频黄免费的久久| 成人听书哪个软件好|