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

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

?? netsocket.c

?? brew網絡編程實例
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*!
 *	Example program.
 *  Copyright (c) 2004 by BREW Development Team, Zhejiang University.
 *  All Rights Reserved.
 */

/*!-----------------------------------

	@file		netsocket.c
	@author		TYB
	@brief		程序主文件

  -----------------------------------*/  


#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h" 
#include "AEEFile.h"
#include "AEENet.h"
#include "netsocket.bid"
#include "AEEStdlib.h"
#include "AEEMenu.h"


typedef struct _CNetSocket {

	AEEApplet		a;

	INetMgr			*pINetMgr;
	ISocket			*pISocket;
	IMenuCtl		*pIMenuCtl;

	AEEDNSResult	dnsresult;
	AEECallback		cbkLookup;
	INAddr			addrsLookup[8];
	
	uint16			APIFnType;


}CNetSocket;


#define USAGE_BASIC_USAGE           100

#define USAGE_NET_GETHOSTBYNAME     101
#define USAGE_NET_GETLASTERROR      102
#define USAGE_NET_OPENSOCKET        103
#define USAGE_NET_SETLINGER         104
#define USAGE_NET_NETSTATUS         105
#define USAGE_NET_GETMYIPADDRESS    106

#define USAGE_SOCKET_GETPEERNAME    107
#define USAGE_SOCKET_GETLASTERROR   108
#define USAGE_SOCKET_CONNECT        109
#define USAGE_SOCKET_BIND           110
#define USAGE_SOCKET_WRITE          111
#define USAGE_SOCKET_WRITEV         112
#define USAGE_SOCKET_READ           113
#define USAGE_SOCKET_READV          114
#define USAGE_SOCKET_SENDTO         115
#define USAGE_SOCKET_RECVFROM       116
#define USAGE_SOCKET_READBALE       117
#define USAGE_SOCKET_WRITEABLE      118
#define USAGE_SOCKET_CANCEL         119
#define USAGE_SOCKET_SHUTDOWN       120

#define USAGE_ERASE_SCREEN          121


#define TIMESERVER_PORT      23
#define TIMESERVER_HOST      "10.214.52.108"

#define USAGE_TEST_HOST      "10.214.52.108"
#define USAGE_TEST_PORT      22

#define ISDIGIT(c)  ( (unsigned) ((c) - '0') < 10)
#define ISALPHA(c)  ( (unsigned) ( ((c)|32) - 'a') < 26 )
#define ISALNUM(c)  ( ISDIGIT(c) || ISALPHA(c) )
#define min(a,b)  ((a) < (b) ? (a) : (b))
#define ARRAYSIZE(a)   (sizeof(a) / sizeof((a)[0]))


/*!
	Function Prototypes
 */
static boolean	HandleEvent(IApplet * pi,AEEEvent eCode,uint16 wParam,uint32 dwParam);

static boolean	InitData(CNetSocket *pme);
static void		FreeData(CNetSocket *pme);
static void		ConnectCBFun(CNetSocket *pme , int wParam);

void			BuildMainMenu(CNetSocket *pMe);
boolean			INetSocketUsage (CNetSocket * pme, uint16 wParam);
void			DisplayOutput(CNetSocket * pi,  int line , char *pszStr);

INAddr			ConvertToINAddr(char *psz);
void			ConvertToIPAddr(INAddr inaddr, char *psz);
void			GetHostByNameCB(void * pUser);
void			CommonReadCB(void *pUser);
void			CommonWriteCB(void *pUser);


/*!
	Function Defintions
 */
 
 
//----------------------------------------------------------------------------------


/*!
 *		@brief:		小程序初始化函數
 *		@para:		ClsId小程序的ClassID
 *		@para:		pIShell底層傳遞來的指向IShell接口的指針
 *		@para:		po指向IModule接口的指針
 *		@para:		ppObj用于初始化以后返回AEEApplet結構的指針
 *		@return:	AEE_SUCCESS表示成功,EFAILED表示失敗
 */
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
	*ppObj = NULL;
	
	if(ClsId != AEECLSID_NETSOCKET)
		return (EFAILED);

	if(TRUE != AEEApplet_New(sizeof(CNetSocket), 
								ClsId, 
								pIShell,
								po,
								(IApplet**)ppObj,
								(AEEHANDLER)HandleEvent,
								(PFNFREEAPPDATA)FreeData))
		return (EFAILED);

	if(!InitData((CNetSocket*)*ppObj))
		return (EFAILED);
		
	return AEE_SUCCESS;
}

/*!
 *		@brief:		消息處理函數
 *		@para:		pi指向IApplet接口的指針
 *		@para:		eCode消息代碼
 *		@para:		wParam是16位的參數
 *		@para:		dwParam是32位的參數
 *		@return:	TRUE表示處理過,FALSE沒有處理
 */
static boolean HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	CNetSocket *pme = (CNetSocket*)pi;

	switch (eCode) 
	{

	case EVT_APP_START:
		ISHELL_CreateInstance(pme->a.m_pIShell,	AEECLSID_MENUCTL, (void**)&pme->pIMenuCtl);
		ISHELL_CreateInstance(pme->a.m_pIShell,	AEECLSID_NET, (void **)&pme->pINetMgr);
		if(pme->pINetMgr)
			//如果這里出現錯誤,又沒有辦法注冊回調函數,所以錯誤是在ISocket接口中的
			//ISOCKET_GetLastError()函數取得
			pme->pISocket = INETMGR_OpenSocket (pme->pINetMgr, AEE_SOCK_STREAM);
		if(pme->pIMenuCtl)
			BuildMainMenu(pme);
   		return TRUE;

	case EVT_APP_STOP:
		return TRUE;

	case EVT_KEY:
		if(pme->pIMenuCtl != NULL && (IMENUCTL_IsActive(pme->pIMenuCtl) == TRUE))
			return IMENUCTL_HandleEvent(pme->pIMenuCtl, EVT_KEY, wParam, 0);
		else if(pme->pIMenuCtl != NULL && (IMENUCTL_IsActive(pme->pIMenuCtl) == FALSE)) {
			if(wParam == AVK_CLR) {
				IMENUCTL_SetActive(pme->pIMenuCtl, TRUE);
				return TRUE;
			}
		}
		break;

	case EVT_COMMAND:
		IDISPLAY_ClearScreen(pme->a.m_pIDisplay);
		INetSocketUsage(pme, wParam);
		break;

	default:
		break;
	}
	return FALSE;
}

/*!
 *		@brief:		初始化函數
 *		@para:		pme指向CNetSocket結構的指針
 *		@return:	TRUE表示成功,FALSE表示失敗
 */
boolean InitData(CNetSocket *pme)
{
	pme->pINetMgr = NULL;
	pme->pISocket = NULL;
	pme->pIMenuCtl= NULL;

	return TRUE;
}

/*!
 *		@brief:		資源釋放函數
 *		@para:		pme指向CNetSocket結構的指針
 */ 
static void	FreeData(CNetSocket *pme)
{
	if(pme->pIMenuCtl) {
		IMENUCTL_Release(pme->pIMenuCtl);
		pme->pIMenuCtl = NULL;
	}

	if(pme->pINetMgr) {
		INETMGR_Release(pme->pINetMgr);
		pme->pINetMgr = NULL;
	}

	if(pme->pISocket) {
		ISOCKET_Release(pme->pISocket);
		pme->pISocket = NULL;
	}
}

/*!
 *		@brief:		程序的主要功能模塊
 *		@para:		pme指向CNetSocket結構的指針
 *		@para:		wParam傳遞到該函數的命令參數
 *		@retval:	TRUE表示成功,FALSE表示失敗
 */ 
boolean INetSocketUsage (CNetSocket * pme, uint16 wParam)
{
	INAddr nodeINAddr;
	uint16 nPort;
	char psz[50] = {0};
	const char hostName [] = "www.sina.com";
	int invalidSockType = 0xff;
	int lastError = 0;
	char lTime[100] = {0};
	uint16 lingerTime1 = 20;
	uint16 prevLingerTime = 0;
	NetState netState = NET_INVALID_STATE;
	AEENetStats netStats;
	int iRetValue = AEE_NET_EBADF;
	uint32 readVal;

	IMENUCTL_SetActive(pme->pIMenuCtl, FALSE);
	IDISPLAY_ClearScreen(pme->a.m_pIDisplay);

	if(pme->pINetMgr && pme->pISocket) 
	{

		switch(pme->APIFnType = wParam) {
		
		//基礎用法,先見識一下回調的工作方式
		case USAGE_BASIC_USAGE:
			nodeINAddr = ConvertToINAddr(USAGE_TEST_HOST);
			nPort = HTONS(USAGE_TEST_PORT);
			ISOCKET_Connect(pme->pISocket, nodeINAddr ,nPort, ConnectCBFun ,pme);
			DisplayOutput (pme,  1, "Connecting...");
			break;

		//注意,這里必須注冊回調函數來進行函數調用結果分析
		case USAGE_NET_GETHOSTBYNAME:
			CALLBACK_Init(&pme->cbkLookup, GetHostByNameCB, pme);
			//注意必須保證在回調函數處理完成之前,pme->dnsresult一直存在
			//還要注意,在調用INETMGR_Release()函數之前保證回調被清除,防止內存錯誤
			INETMGR_GetHostByName(pme->pINetMgr,&pme->dnsresult, hostName, &pme->cbkLookup);
			break;

		//返回錯誤代碼
		case USAGE_NET_GETLASTERROR:
			{
				ISocket *pISocket = NULL;
				if(pme->pINetMgr)
					//此處用一個非法的socket類型來打開socket連接
					pISocket = INETMGR_OpenSocket(pme->pINetMgr, invalidSockType);
				if(!pISocket)
					lastError = INETMGR_GetLastError(pme->pINetMgr);
				if(lastError != AEE_NET_SUCCESS) {
					//打印出錯誤號碼
					SPRINTF(psz, "Error Id: %u", lastError);
					DisplayOutput(pme, 1, psz);
				}
				else
					DisplayOutput (pme, 1, "GetLastError: failed");
				if(pISocket)
					ISOCKET_Release(pISocket);
			}
			break;

		//設置網絡延遲時間,返回值是以前的延遲時間,不能注冊回調函數
		case USAGE_NET_SETLINGER:
               prevLingerTime = INETMGR_SetLinger (pme->pINetMgr, lingerTime1);
               SPRINTF (lTime, "Linger Time 1 = %u", prevLingerTime);
               DisplayOutput (pme, 1, lTime);

               prevLingerTime = INETMGR_SetLinger (pme->pINetMgr, lingerTime1);
               SPRINTF (lTime, "Linger Time 2 = %u", prevLingerTime);
               DisplayOutput (pme, 2, lTime);
			   break;

		//取得自己的IP地址,返回值是一個IP地址,不能注冊回調函數
		//由于返回值的IP不是字符串,所以要想顯示先得轉換
		case USAGE_NET_GETMYIPADDRESS:
			nodeINAddr = INETMGR_GetMyIPAddr(pme->pINetMgr);
			ConvertToIPAddr(nodeINAddr, psz);
			DisplayOutput(pme , 1, psz);
			break;

		//取得網絡狀態,網絡的狀態通過返回值取得,網絡參數通過傳入一個指針參數來獲取
		//這個函數也是不需要也不能注冊回調函數
		case USAGE_NET_NETSTATUS:
			netState = INETMGR_NetStatus (pme->pINetMgr, &netStats);
			switch (netState)
			{
			case NET_INVALID_STATE:
				DisplayOutput (pme, 1, "Status: Invalid");
				break;
			case NET_PPP_OPENING:
				DisplayOutput (pme, 1, "Status: Opening");
				break;
			case NET_PPP_OPEN:
				DisplayOutput (pme,  1, "Status: Open");
				break;
			case NET_PPP_CLOSING:
				DisplayOutput (pme,  1, "Status: Closing");
				break;
			case NET_PPP_CLOSED:
				DisplayOutput (pme, 1, "Status: Closed");
				break;
			}
			break;

		//注意,INetMgr接口除了INETMGR_GetHonstByName()函數以外,還有一個比較特殊的函數
		//這個函數可以將INetMgr接口產生的所有事件都全部截獲,并在事件發生時調用一個
		//回調函數來進行處理



		//用于套接字和本地地址和端口相關聯,只能用于未連接的套接字,通常是用于
		//數據報套接字,第二個參數必須是AEE_INADDR_ANY,原因見API文檔。此函數
		//不能注冊回調,執行情況通過返回值取得,如果阻塞,用ISOCKET_Writeable()
		//注冊一個回調函數等待可以傳輸時進行相應的處理,在回調函數中可以再次調
		//用以取得最終結果,是成功還是失敗,ISOCKET_Writeable() 可以獲取再次調
		//用Bind() 的時間通知。請注意,和Write()一樣, ISOCKET_Writeable() 回調
		//無法確保完成后續的Bind() 調用,因此調用程序必須準備再次接收
		//AEE_NET_WOULDBLOCK,一旦綁定成功,可以進行讀寫操作了
		case USAGE_SOCKET_BIND:
			if ((iRetValue = ISOCKET_Bind (pme->pISocket, AEE_INADDR_ANY, 1240))
				== AEE_NET_WOULDBLOCK)
				ISOCKET_Writeable(pme->pISocket, CommonWriteCB, (void *)pme);
			else
				if (iRetValue != AEE_NET_SUCCESS)
					DisplayOutput (pme, 1, "Bind Failed.");
				else
					DisplayOutput (pme, 1, "Bind Succeeded.");
			break;

		//ISocket接口中比較簡單的一個函數,不需要注冊回調函數,直接返回結果
		case USAGE_SOCKET_GETLASTERROR:
			//此處還沒有連接,所以調用Read函數會出錯
			if (AEE_NET_SUCCESS != (iRetValue = ISOCKET_Read(pme->pISocket, (byte*)&readVal, sizeof(uint32))))
				if ((lastError = ISOCKET_GetLastError(pme->pISocket))== AEE_NET_ENOTCONN)
					DisplayOutput (pme, 1, "Err: Not Connected");
			break;

		//以下這些功能的調用都沒有直接在這里進行演示,而是都放在
		//ConnectCBFun()函數中進行處理,原因很簡單,這些操作都必
		//須在網絡接通的情況下進行,而網絡連接的ISOCKET_Connect()
		//函數是異步執行,需要注冊一個回調函數,不管執行是否成功
		//即:連接是否成功,都會調用回調函數,正確和錯誤的處理都
		//必須在回調函數中進行,所以這些功能都必須在回調中處理
		case USAGE_SOCKET_GETPEERNAME:
		case USAGE_SOCKET_WRITE:
		case USAGE_SOCKET_WRITEV:
		case USAGE_SOCKET_READ:
		case USAGE_SOCKET_READV:
		case USAGE_SOCKET_READBALE:
		case USAGE_SOCKET_WRITEABLE:

			nodeINAddr = ConvertToINAddr(USAGE_TEST_HOST);
			//此函數用于將無符號短整型值從主機轉換為網絡字節順序。
			nPort = HTONS(USAGE_TEST_PORT);

			//這里的ISOCKET_Connect()其實有兩個作用,一個是網絡連接
			//另一個是進行回調的注冊
			if ((iRetValue = ISOCKET_Connect (pme->pISocket, nodeINAddr, nPort, 
				ConnectCBFun, (void *)pme))  != AEE_NET_SUCCESS)
				if (iRetValue != AEE_NET_WOULDBLOCK) {
					//函數ISOCKET_GetLastError不能注冊回調,直接返回值
					lastError = ISOCKET_GetLastError(pme->pISocket);
					SPRINTF(psz, "ERROR Number : %u",lastError);
					DisplayOutput(pme, 2, psz);
				}
			DisplayOutput (pme, 1, "Connecting...");
			break;

		case USAGE_SOCKET_CANCEL:
			if(pme->pISocket) {
				ISOCKET_Cancel (pme->pISocket, 0, 0);
				DisplayOutput (pme, 1, "Socket Canceled");
			}
			else
				DisplayOutput(pme,1,"The Net Is Not Open!");
			break;

		case USAGE_SOCKET_SENDTO:
		case USAGE_SOCKET_RECVFROM:
			{
				int32 iRetValue = 0;
				INAddr nodeINAddr;
				uint16 nPort;
				int  rv;
				char pszSendData[100] = "UDP packet sent to and received from echo-port of remote host...";
				char pszRecvData[100] = {0};
				
				if(pme->pISocket)
					ISOCKET_Release(pme->pISocket);
				pme->pISocket = INETMGR_OpenSocket(pme->pINetMgr,AEE_SOCK_DGRAM);
				if(!pme->pISocket) {
					DisplayOutput(pme,2,"Socket can't open!");
					return TRUE;
				}
				nodeINAddr = ConvertToINAddr(TIMESERVER_HOST);
				nPort = HTONS(TIMESERVER_PORT);
				//ISOCKET_Connect(pme->pISocket,nodeINAddr,nPort,ConnectCBFun,pme);
				ISOCKET_Writeable(pme->pISocket,CommonWriteCB,pme);
				iRetValue = ISOCKET_SendTo(pme->pISocket,(byte*)pszSendData,
					(uint16)STRLEN(pszSendData),0,nodeINAddr,nPort);
				if(iRetValue == AEE_NET_ERROR){
					DisplayOutput(pme,3,"Send Error!");
					return FALSE;
				}
				else if(iRetValue > 0) {
					ISOCKET_Readable(pme->pISocket,CommonReadCB,pme);
					rv = ISOCKET_RecvFrom(pme->pISocket,(byte*)pszRecvData,sizeof(pszRecvData),
						0,&nodeINAddr,&nPort);
					if(rv == AEE_NET_WOULDBLOCK)
						return TRUE;
					else if(rv > 0) {
						ISOCKET_Cancel(pme->pISocket,CommonReadCB,pme);
						DisplayOutput(pme,3,pszRecvData);
					}
						
				}
				break;
			}

		default:
			break;
		}
		return TRUE;
	}
	return FALSE;
}

/*!
 *		@brief:		讀回調函數
 *		@para:		pUser指向用戶的指針
 */
void CommonReadCB(void *pUser)
{
	CNetSocket * pMe = (CNetSocket*)pUser;
	ISocket *piSock = pMe->pISocket;
	
	switch (pMe->APIFnType) {
	case USAGE_BASIC_USAGE:
		{
            int32 rv;
            char szBuf[100] = {0};
            rv = ISOCKET_Read(piSock, (byte *)szBuf, sizeof(szBuf));
			//由于ISOCKET_Read函數是立即返回,所以這里直接可以從其返回值
			//rv來判定執行狀況,如果是AEE_NET_WOULDBLOCK說明沒有可用數據
			//但是連接仍然有效,即,仍然處于接受數據的有效狀態
            if (rv == AEE_NET_WOULDBLOCK) {
				ISOCKET_Readable(piSock, CommonReadCB, (void*)pMe); 
				return;
            } 
			//如果套接字未處于接收數據的有效狀態,則返回AEE_NET_ERROR錯誤
            else if (rv == AEE_NET_ERROR) 
				DisplayOutput (pMe, 1, "Read Error!");
			//如果“rv > 0”則表示讀取成功,rv大小表示讀取的字節數目
            else if (rv > 0)
				DisplayOutput (pMe, 4, szBuf);
			//如果不再有需要接受的數據,且對等端已經斷開連接,則返回0
            else
				DisplayOutput (pMe, 1, "No Data!");
		}
		break;
	case USAGE_SOCKET_WRITE:
	case USAGE_SOCKET_WRITEABLE:
		{
            int32 rv;
            char szBuf[100] = {0};
            rv = ISOCKET_Read(piSock, (byte*)szBuf, sizeof(szBuf));
            if (rv == AEE_NET_WOULDBLOCK) {
				ISOCKET_Readable(piSock, CommonReadCB, (void*)pMe); 
				return;
            } 
            else if (rv == AEE_NET_ERROR) 
				DisplayOutput (pMe, 1, "Read Error!");
            else if (rv > 0)
				DisplayOutput (pMe, 1, szBuf);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级日本三级少妇99| 成人免费视频caoporn| 国产一区 二区| 欧美日韩精品欧美日韩精品一| 久久精品视频一区二区三区| 日韩精品乱码免费| 色综合天天狠狠| 国产精品国产自产拍高清av| 国模娜娜一区二区三区| 555夜色666亚洲国产免| 亚洲一级二级三级| 99久久99久久综合| 精品国产乱码91久久久久久网站| 91麻豆精品国产91久久久资源速度| 国产精品免费视频一区| 韩国毛片一区二区三区| 日韩午夜电影av| 日韩—二三区免费观看av| 色94色欧美sute亚洲线路一ni| 欧美国产亚洲另类动漫| 国产精品亚洲综合一区在线观看| 日韩女优电影在线观看| 蜜臀av一级做a爰片久久| 国产欧美日韩久久| 极品美女销魂一区二区三区 | 欧美v国产在线一区二区三区| 一区二区成人在线视频| 欧美亚洲国产bt| 亚洲综合色丁香婷婷六月图片| 色综合激情久久| 伊人一区二区三区| 欧美日韩一区二区三区高清| 色狠狠综合天天综合综合| 国产精品美女一区二区三区| 大桥未久av一区二区三区中文| 国产婷婷一区二区| 成人av网站在线观看| 中文字幕在线免费不卡| 91毛片在线观看| 亚洲五码中文字幕| 欧美久久久久久久久久| 麻豆久久久久久| 久久欧美中文字幕| 粗大黑人巨茎大战欧美成人| 最新中文字幕一区二区三区| 91福利在线观看| 日韩电影免费在线观看网站| 亚洲精品在线观| 99久久99久久久精品齐齐| 亚洲色图色小说| 欧美人伦禁忌dvd放荡欲情| 热久久免费视频| 久久精品欧美一区二区三区麻豆| 一区二区三区91| 亚洲人成精品久久久久久| av不卡免费在线观看| 亚洲国产一区二区三区青草影视| 91成人免费在线视频| 久久成人免费日本黄色| 日本一区二区三区国色天香| 色婷婷久久久久swag精品| 亚洲成a人在线观看| 久久久一区二区| 欧美日韩亚洲另类| 懂色av一区二区三区蜜臀 | 91日韩在线专区| 日韩精品乱码免费| 国产精品女同互慰在线看| 欧美视频在线一区二区三区| 国产一区二区福利视频| 亚洲第一福利一区| 国产亚洲制服色| 欧美精品aⅴ在线视频| 不卡视频一二三| 免费人成精品欧美精品| 精品一二线国产| 日韩精品免费视频人成| 国产亚洲欧美在线| 色吧成人激情小说| 精品亚洲成a人| 亚洲国产精品久久久男人的天堂| 久久久午夜精品| 欧美一区二区三区在线看| 国产麻豆精品95视频| 依依成人精品视频| 国产欧美一区二区三区网站| 在线播放中文字幕一区| 成人网在线播放| 久久疯狂做爰流白浆xx| 日韩专区一卡二卡| 亚洲少妇最新在线视频| 久久品道一品道久久精品| 这里只有精品99re| 在线观看三级视频欧美| 99这里都是精品| 岛国一区二区三区| 国产馆精品极品| 亚洲黄色性网站| 国产日韩欧美不卡| www精品美女久久久tv| 7777女厕盗摄久久久| 在线观看不卡一区| 91婷婷韩国欧美一区二区| 久久国产三级精品| 欧美aⅴ一区二区三区视频| 天天影视网天天综合色在线播放| 一区二区三区在线观看国产| 亚洲免费看黄网站| 一区二区在线观看免费视频播放| 中文字幕日韩精品一区 | 久久夜色精品国产噜噜av| 欧美一级视频精品观看| 91精品国产欧美一区二区| 91麻豆精品国产91久久久久| 日韩亚洲欧美综合| 日韩免费性生活视频播放| 日韩三级视频中文字幕| 精品国产一区二区在线观看| 精品福利一二区| 国产免费久久精品| 国产精品久久久久久久久果冻传媒 | jizz一区二区| av爱爱亚洲一区| 欧美在线免费播放| 56国语精品自产拍在线观看| 日韩欧美亚洲另类制服综合在线| 日韩午夜在线影院| 久久人人97超碰com| 中文字幕一区二区三区精华液| 亚洲女子a中天字幕| 性做久久久久久免费观看| 日日骚欧美日韩| 国产一区二区美女诱惑| 成人国产亚洲欧美成人综合网| 一本色道**综合亚洲精品蜜桃冫| 色94色欧美sute亚洲线路一ni| 欧美高清激情brazzers| 久久综合色婷婷| 亚洲视频你懂的| 免费不卡在线观看| 国产1区2区3区精品美女| 色欧美88888久久久久久影院| 69堂成人精品免费视频| 国产日产欧美一区二区三区| 亚洲欧洲无码一区二区三区| 天堂av在线一区| 成人精品视频.| 666欧美在线视频| 国产精品麻豆久久久| 亚洲h精品动漫在线观看| 国产福利一区二区| 欧美日韩在线综合| 2021中文字幕一区亚洲| 亚洲黄一区二区三区| 精品一区二区三区蜜桃| 色先锋aa成人| 精品国产免费人成在线观看| 亚洲精品免费在线播放| 狠狠久久亚洲欧美| 欧美日韩色一区| 国产女主播一区| 久久精品国产99国产精品| 91成人在线免费观看| 国产人成一区二区三区影院| 日本人妖一区二区| 欧美综合欧美视频| 国产亚洲成av人在线观看导航| 视频一区视频二区中文字幕| 91在线精品一区二区| 久久男人中文字幕资源站| 首页亚洲欧美制服丝腿| 91视频你懂的| 国产精品家庭影院| 韩国av一区二区三区在线观看| 欧美日韩一区二区欧美激情 | 蜜桃av噜噜一区二区三区小说| 色8久久精品久久久久久蜜| 久久色成人在线| 九九精品视频在线看| 制服丝袜亚洲网站| 视频一区二区三区在线| 在线免费观看日本欧美| 国产精品久久综合| 粉嫩一区二区三区性色av| 久久这里只有精品6| 久久国产综合精品| 日韩女同互慰一区二区| 手机精品视频在线观看| 欧美欧美午夜aⅴ在线观看| 亚洲精选视频免费看| 99久久777色| 国产精品久久久久久福利一牛影视 | 欧美亚洲高清一区| 亚洲一区视频在线| 欧美三级三级三级| 婷婷激情综合网| 91精品国产综合久久香蕉麻豆| 午夜一区二区三区在线观看| 欧美精品日韩一本| 久久激情五月激情|