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

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

?? netcmt.cpp

?? 足球機器人功能demo
?? CPP
字號:
// NetCmt.cpp: implementation of the CNetCmt class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NetCmt.h"

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

#define MAX_SOCKETBUFFER 1024

//監聽線程函數體
//There are two prototype of server socket, one is for large data flow
//another is for little data flow
//here I adopted the first one, which will cost more system resource
UINT ListenThread(LPVOID pParam)
{
	SOCKETLISTENPARAM *psockparam=(SOCKETLISTENPARAM*)pParam;

	sockaddr_in from;
	int fromlen = sizeof(from);

	//線程將會在下面這個函數阻塞,直到有客戶端連接進來
	SOCKET ClientSocket = accept(psockparam->listen_socket,(struct sockaddr*)&from,&fromlen);

	//判斷是否連接上
	if (ClientSocket == INVALID_SOCKET)
	{
		int iErr = WSAGetLastError();
		if (iErr != WSAEINTR)
		{
			AfxBeginThread(ListenThread,pParam);
		}
		return 0L;
	}

	//生成一個ip字符串,后邊用
	CString strIP;
	strIP.Format("%d.%d.%d.%d",
			from.sin_addr.S_un.S_un_b.s_b1, 
			from.sin_addr.S_un.S_un_b.s_b2,
			from.sin_addr.S_un.S_un_b.s_b3,
			from.sin_addr.S_un.S_un_b.s_b4);
	

	//連接成功,新開啟一個監聽線程
	AfxBeginThread(ListenThread,pParam);
	
	//將連接客戶端信息添加到通訊主體的客戶端列表里
	if (psockparam->pListener->GetClientList() != NULL)
	{
		CLIENTINFO *pInfo = new CLIENTINFO;
		memset(pInfo->fromip,0,sizeof(char)*16);
		pInfo->socket = ClientSocket;
		pInfo->fromport = from.sin_port;
		strcpy(pInfo->fromip,strIP.GetBuffer(strIP.GetLength()));
		psockparam->pListener->GetClientList()->AddTail(pInfo);
		
		psockparam->pListener->AferConnect(pInfo);
	}


	//分配一個緩沖區接收數據
	char *buffer=new char[MAX_SOCKETBUFFER];

	while (1)
	{
		//線程將會堵塞在這個函數里直到收到數據
		int irecv = recv(ClientSocket,buffer,MAX_SOCKETBUFFER,0);
		//假如連接斷開則跳出循環
		if (irecv <= 0)
		{
			delete []buffer;
			return 0;
		}

		psockparam->pListener->AfterReceived(buffer,irecv,strIP.GetBuffer(strIP.GetLength()));
	}


	//here remove client info from m_pClientList
	//if server wanna shut down a socket, it only need to close that socket
	
	POSITION pos;
	if (psockparam->pListener->GetClientList()!=NULL)
	{
		for (pos=psockparam->pListener->GetClientList()->GetHeadPosition();pos!=NULL;)
		{
			POSITION oldpos=pos;
			CLIENTINFO *pInfo=(CLIENTINFO *)psockparam->pListener->GetClientList()->GetNext(pos);
			if (pInfo->socket==ClientSocket)
			{
				psockparam->pListener->GetClientList()->RemoveAt(oldpos);
				delete pInfo;
				break;
			}
		}
	}
	
	//release resource
	delete[] buffer;
	closesocket(ClientSocket);
	

	return 0;
}


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

CNetCmt::CNetCmt()
{
	m_pClientList=new CPtrList();
	m_pParam=new SOCKETLISTENPARAM;
	m_pClientList=new CPtrList();
	m_ListenSocket = INVALID_SOCKET;

	m_pShowList = m_pShowClient = NULL;
	m_bListening = FALSE;
	m_bFrame = FALSE;
	m_reccnt = 0;

	m_ppAhead = NULL;
	m_ppOverlook = NULL;
}

CNetCmt::~CNetCmt()
{
	//clear all client information
	POSITION pos;
	for (pos=m_pClientList->GetHeadPosition();pos!=NULL;)
	{
		CLIENTINFO *pinfo=(CLIENTINFO *)m_pClientList->GetNext(pos);
		closesocket(pinfo->socket);
		//delete pinfo;
	}

	Sleep(500);

	for (pos=m_pClientList->GetHeadPosition();pos!=NULL;)
	{
		CLIENTINFO *pinfo=(CLIENTINFO *)m_pClientList->GetNext(pos);
		//closesocket(pinfo->socket);
		delete pinfo;
	}

	m_pClientList->RemoveAll();
	delete m_pClientList;
	m_pClientList=NULL;
}

BOOL CNetCmt::Listen(int inPort)
{
	//初始化
	m_nListenPort = inPort;
	m_ListenSocket = socket(AF_INET,SOCK_STREAM,0);

	struct sockaddr_in socketaddr;
	socketaddr.sin_family = AF_INET;
	socketaddr.sin_addr.S_un.S_addr = INADDR_ANY;
	socketaddr.sin_port = htons(inPort);

	if (bind(m_ListenSocket,(sockaddr *)&socketaddr,sizeof(socketaddr)) != 0)
	{
		return FALSE;
	}

	if (listen(m_ListenSocket,300) != 0)
	{
		return FALSE;
	}

	//開始監聽
	m_pParam->listen_socket = m_ListenSocket;
	m_pParam->pListener = this;
	AfxBeginThread(ListenThread,m_pParam);

	m_bListening = TRUE;
	
	return TRUE;
}

BOOL CNetCmt::Close()
{
	closesocket(m_ListenSocket);
	m_bListening = FALSE;
	return TRUE;
}

BOOL CNetCmt::isListening()
{
	return m_bListening;
}

//接收數據以后進行的處理
void CNetCmt::AfterReceived(void *buf, int length,char *pFromIP)
{
	for (int i=0;i<=length-7;i++)
	{
		if (m_Parse((UCHAR*)buf+i,length-i) == TRUE)
		{	//解析成功,跳過7個字節
			i+=7;
		} 
	}
}

//連接后的處理
void CNetCmt::AferConnect(CLIENTINFO *inClinfo)
{
	if (m_pShowClient != NULL)
	{
		CString ip(inClinfo->fromip);
		CString port;
		port.Format(": %d",inClinfo->fromport);
		ip += port;
		m_pShowClient->AddString(ip);
	}

	memcpy(lastIP,inClinfo->fromip,16);
}

BOOL CNetCmt::GetHostIP(TCHAR * inData)
{
	char name[255];
	if( gethostname ( name, sizeof(name)) == 0)
	{
		hostent* pHostent = gethostbyname(name);
		hostent& he = *pHostent;
		sockaddr_in sa;
		for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) 
		{
			memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
		}

		/*inClnt->IP_b1 = (BYTE)sa.sin_addr.S_un.S_un_b.s_b1;
		inClnt->IP_b2 = (BYTE)sa.sin_addr.S_un.S_un_b.s_b2;
		inClnt->IP_b3 = (BYTE)sa.sin_addr.S_un.S_un_b.s_b3;
		inClnt->IP_b4 = (BYTE)sa.sin_addr.S_un.S_un_b.s_b4;*/
	}
	return TRUE;
}

BOOL CNetCmt::m_Parse(const UCHAR* inbuf,int length)
{
	if (inbuf[0] == 0x55 && inbuf[1] == 0xAA)
	{
		switch(inbuf[2])
		{
		case 1:	//打開
			m_pcmd->m_netsend.ConnectTo(lastIP,1000);
			m_Control(0);
			break;
		case 2:	//剎車
			m_pcmd->SetBehavior(NULL);
			m_pcmd->Brake(1);
			break;
		case 3:	//界面按鈕控制
			m_Control(inbuf[3]);
			break;
		case 4:	//更新移動速度
			SetWindowText(GetDlgItem(m_hmain,IDC_BOTHSPEED),"800");
			break;
		case 5:	//設置動作
			break;
		case 6:	//打開前置攝像頭圖像傳輸
			if (m_ppAhead != NULL)
			{
				if (*m_ppAhead != NULL)
				{
					(*m_ppAhead)->ConnectTo(lastIP,100038);
				}
			}
			break;
		case 7:	//關閉前置攝像頭圖像傳輸
			if (m_ppAhead != NULL)
			{
				if (*m_ppAhead != NULL)
				{
					(*m_ppAhead)->mCB.m_socket = INVALID_SOCKET;
				}
			}
			break;

/*		case 8:	//打開攝像頭圖像傳輸
			if (m_ppAhead != NULL)
			{
				if (*m_ppAhead != NULL)
				{
					(*m_ppAhead)->ConnectTo(lastIP,100038);
				}
			}
			break;
		case 9:	//關閉前置攝像頭圖像傳輸
			if (m_ppAhead != NULL)
			{
				if (*m_ppAhead != NULL)
				{
					(*m_ppAhead)->mCB.m_socket = INVALID_SOCKET;
				}
			}
			break;*/
		}
		return TRUE;	//合法指令且解析成功
	}
	else
		return FALSE;	//非法指令組合
}

void CNetCmt::m_Control(UCHAR inCtrl)
{
	HWND h;
	switch(inCtrl)
	{
	case 0:	//按下開始按鈕
		h = FindWindowEx(m_hmain,0,NULL,"打開");
		PostMessage(h,BM_CLICK,0,0);
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x01:	//按前進
		h = FindWindowEx(m_hmain,0,NULL,"前進");
		PostMessage(h,BM_CLICK,0,0);
		break;
	case 0x02:	//按后退
		h = FindWindowEx(m_hmain,0,NULL,"后退");
		PostMessage(h,BM_CLICK,0,0);
		break;
	case 0x03:	//按左轉
		h = FindWindowEx(m_hmain,0,NULL,"左轉");
		PostMessage(h,BM_CLICK,0,0);
		break;
	case 0x04:	//按右轉
		h = FindWindowEx(m_hmain,0,NULL,"右轉");
		PostMessage(h,BM_CLICK,0,0);
		break;
	case 0x05:	//按剎車
		h = FindWindowEx(m_hmain,0,NULL,"剎車");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x06:	//打開前方視頻
		h = FindWindowEx(m_hmain,0,NULL,"開啟前方");
		PostMessage(h,BM_CLICK,0,0);		
		break;

	case 0x07:	//關閉前方視頻
		h = FindWindowEx(m_hmain,0,NULL,"關閉前方");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x08:	//去行為
		h = FindWindowEx(m_hmain,0,NULL,"去除行為");
		PostMessage(h,BM_CLICK,0,0);
		h = FindWindowEx(m_hmain,0,NULL,"剎車");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x09:	//行為一
		h = FindWindowEx(m_hmain,0,NULL,"行為一");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x0A: //跟球
		h = FindWindowEx(m_hmain,0,NULL,"前向跟球");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x0B:	//打開全局視頻
		h = FindWindowEx(m_hmain,0,NULL,"開啟全局");
		PostMessage(h,BM_CLICK,0,0);		
		break;

	case 0x0C:	//關閉全局視頻
		h = FindWindowEx(m_hmain,0,NULL,"關閉全局");
		PostMessage(h,BM_CLICK,0,0);
		break;
	
	case 0x0D:	//全局行為
		h = FindWindowEx(m_hmain,0,NULL,"全景尋球");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x0E:	//打開超聲
		h = FindWindowEx(m_hmain,0,NULL,"打開超聲");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x0F:	//關閉超聲
		h = FindWindowEx(m_hmain,0,NULL,"關閉超聲");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x10:	//打開紅外
		h = FindWindowEx(m_hmain,0,NULL,"激活紅外");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x11:	//關閉紅外
		h = FindWindowEx(m_hmain,0,NULL,"關閉紅外");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x12:	//打開羅盤
		h = FindWindowEx(m_hmain,0,NULL,"激活羅盤");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x13:	//關閉羅盤
		h = FindWindowEx(m_hmain,0,NULL,"關閉羅盤");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x14:	//平滑加速
		h = FindWindowEx(m_hmain,0,NULL,"加速");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x15:	//三角
		h = FindWindowEx(m_hmain,0,NULL,"三角");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x16:	//陀螺儀轉向導航
		h = FindWindowEx(m_hmain,0,NULL,"轉向");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x17:	//陀螺儀直線導航
		h = FindWindowEx(m_hmain,0,NULL,"直行");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x18:	//S形路線
		h = FindWindowEx(m_hmain,0,NULL,"S形");
		PostMessage(h,BM_CLICK,0,0);
		break;
	
	case 0x19:	//踢球
		h = FindWindowEx(m_hmain,0,NULL,"踢球");
		PostMessage(h,BM_CLICK,0,0);
		break;

	case 0x1A:	//找球
		h = FindWindowEx(m_hmain,0,NULL,"前向找球");
		PostMessage(h,BM_CLICK,0,0);
		break;
	}
}

void CNetCmt::SetMainWin(HWND inhwnd)
{
	m_hmain = inhwnd;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久午夜免费电影| 欧美亚洲免费在线一区| 久久久久久久av麻豆果冻| 精品一区二区三区免费| 欧美一区二区福利在线| 麻豆91免费看| 亚洲国产成人在线| 91丨九色丨黑人外教| 一区二区三区四区高清精品免费观看 | 国产白丝精品91爽爽久久| 久久久高清一区二区三区| 成人福利视频网站| 一区二区三区四区高清精品免费观看| 欧美性受xxxx黑人xyx| 欧美aaaaa成人免费观看视频| 久久综合九色综合欧美亚洲| 成人精品一区二区三区四区| 亚洲国产一二三| 日韩欧美一区二区免费| 福利91精品一区二区三区| 亚洲综合在线五月| 欧美大片在线观看一区二区| 成人高清视频在线| 同产精品九九九| 国产日韩精品久久久| 欧美在线色视频| 精品一区二区三区在线视频| 中文字幕在线不卡视频| 欧美理论在线播放| 国产高清不卡一区| 午夜电影网一区| 欧美国产综合色视频| 91.xcao| 99精品偷自拍| 久久电影网站中文字幕| 亚洲男人电影天堂| 日韩美女一区二区三区| 色婷婷一区二区三区四区| 久久国产乱子精品免费女| 一区二区三区色| 国产日韩视频一区二区三区| 欧美一区二区三区四区五区| 91女神在线视频| 国产精品自拍毛片| 婷婷综合另类小说色区| 亚洲欧美福利一区二区| 国产亚洲一本大道中文在线| 欧美日韩国产精品成人| 91在线视频观看| 国产精品综合二区| 精品一区二区免费在线观看| 亚洲一线二线三线视频| 中文字幕一区二区三区四区不卡| 日韩欧美国产wwwww| 欧美日韩中文字幕一区二区| 99视频一区二区| 国产成人av一区二区| 麻豆国产欧美日韩综合精品二区 | 欧美日韩一区在线观看| eeuss鲁片一区二区三区在线观看| 麻豆精品久久精品色综合| 午夜欧美2019年伦理| 一区二区三区四区乱视频| 亚洲欧洲日产国产综合网| 久久久亚洲国产美女国产盗摄 | 国产精品美女久久久久久久| 久久一区二区视频| 欧美精品一区男女天堂| 欧美一级艳片视频免费观看| 欧美美女喷水视频| 色偷偷久久一区二区三区| 97久久精品人人做人人爽| 不卡的电视剧免费网站有什么| 国产激情91久久精品导航| 韩国一区二区在线观看| 蜜桃视频在线观看一区二区| 美女视频一区二区三区| 奇米影视7777精品一区二区| 免费的成人av| 狠狠久久亚洲欧美| 国产91色综合久久免费分享| 国产精品1区2区3区| 国产91露脸合集magnet| 国产99久久久久| 波多野结衣中文一区| 一本一道久久a久久精品综合蜜臀| 91视频在线看| 欧美影院一区二区| 欧美精品在线一区二区三区| 欧美一卡二卡三卡四卡| 欧美成人a在线| 国产精品无遮挡| 亚洲综合免费观看高清完整版| 亚洲成在线观看| 另类小说色综合网站| 成人网页在线观看| 色av一区二区| 欧美一级日韩不卡播放免费| 欧美精品一区二区三区视频| 国产精品灌醉下药二区| 一区二区三区在线视频免费 | 亚洲成人免费看| 日本视频一区二区| 国产成人综合亚洲网站| 99久久精品国产精品久久| 欧美日韩一区二区三区免费看| 欧美一级午夜免费电影| 国产精品美女久久久久av爽李琼| 一区二区三区国产豹纹内裤在线 | 欧美一区二区免费视频| 久久久久久久久久电影| 亚洲精品美腿丝袜| 毛片不卡一区二区| av网站一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 久久精品在这里| 亚洲精品少妇30p| 久久福利视频一区二区| 色综合久久天天| 欧美电影免费观看高清完整版在线观看 | 日韩精品免费专区| 国产二区国产一区在线观看| 欧美午夜不卡在线观看免费| 精品电影一区二区三区| 一二三区精品视频| 国产乱码一区二区三区| 色哟哟一区二区三区| 久久老女人爱爱| 亚洲成av人影院在线观看网| 粉嫩一区二区三区性色av| 欧美剧情片在线观看| 中文一区一区三区高中清不卡| 日韩二区三区四区| 色悠悠久久综合| 中文乱码免费一区二区| 久久狠狠亚洲综合| 欧美日韩综合一区| 亚洲欧洲成人av每日更新| 国产一区二区精品久久99| 欧美日韩国产中文| 亚洲少妇30p| 国产成人在线视频网站| 日韩欧美另类在线| 午夜精品久久久久影视| 91在线小视频| 国产精品美女久久久久aⅴ| 韩国av一区二区| 日韩一区二区免费在线观看| 亚洲综合色噜噜狠狠| 色婷婷精品久久二区二区蜜臂av| 国产午夜亚洲精品羞羞网站| 蜜桃传媒麻豆第一区在线观看| 欧美午夜不卡视频| 亚洲午夜一区二区三区| 色域天天综合网| 一区二区在线观看不卡| 91日韩一区二区三区| 最新不卡av在线| 91丨porny丨国产入口| 中文字幕综合网| 99精品久久只有精品| 国产精品视频免费看| 懂色av噜噜一区二区三区av| 久久久久久久综合| 国产综合色在线视频区| 日韩欧美一区二区久久婷婷| 日本不卡123| 欧美岛国在线观看| 精品一区二区在线视频| 久久九九全国免费| 成人综合婷婷国产精品久久蜜臀| 久久久精品国产免费观看同学| 国产综合色视频| 中文一区一区三区高中清不卡| 成人免费视频一区二区| 中文字幕一区二区三区在线播放| 不卡大黄网站免费看| 一区二区三区精品| 欧美日韩精品欧美日韩精品一| 午夜成人免费视频| 日韩免费观看高清完整版| 国产伦精品一区二区三区在线观看| 精品国产一二三区| 国产美女精品一区二区三区| 国产精品色哟哟| 欧洲一区在线观看| 日本视频一区二区| 国产亚洲精品bt天堂精选| 成人ar影院免费观看视频| 一区二区三区在线播| 日韩视频中午一区| 成人中文字幕电影| 亚洲免费观看在线观看| 制服丝袜日韩国产| 国产麻豆精品久久一二三| 悠悠色在线精品| 日韩视频永久免费| 不卡一区在线观看| 日日摸夜夜添夜夜添精品视频 | 欧美日韩国产综合一区二区 |