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

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

?? client.c

?? VC++語言中級教材,講授網絡編程中語言的運用技術
?? C
字號:
//  從服務器端接收桌面屏幕
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include "client.h"
#include "command.h"
#include "gdi.h"
#include "HuffCompress.h"
#include "RLE.h"
#include "time.h"

#define DEFAULT_PORT        5150
#define REFRESH_MSG			"REFRESH"
#define SETFLAGS			XP1_GUARANTEED_DELIVERY|XP1_GUARANTEED_ORDER
#define NOTSETFLAGS			XP1_CONNECTIONLESS
#define	LPBMIH				LPBITMAPINFOHEADER

UINT    port=DEFAULT_PORT;
BOOL	bSendOnly = FALSE;
BOOL	fSending = FALSE;
BOOL	fReceiving = FALSE;
DWORD	iLen;
char	*pDIBitmap;
int		iScreenWidth,iScreenHeight;
int		iWidth,iHeight,iWidthX,iHeightY;
int		iWidth1,iWidth2,iHeight1,iHeight2;
int		iCompressionLevel;
BOOL	fDIBitmap = FALSE;
LPBMIH	lpBitmapIH;
struct	sockaddr_in	server;
SOCKET	sClient;
BOOL	fRefreshing = FALSE;
BOOL	fConnected = FALSE;
int		nGridX = 8,nGridY = 4;
BOOL	fGridX = FALSE,fGridY = FALSE;
WORD	bmBitsPixel = 4;

struct	GdiList		GdiStart;
struct	GdiList		*pGdiNode;

int SelectProtocols(DWORD dwSetFlags,DWORD dwNotSetFlags,LPWSAPROTOCOL_INFO lpProtocolBuffer,LPDWORD lpdwBufferLength,WSAPROTOCOL_INFO *Protocol);

void InitGrids()
{
	int		iLoop,jLoop,nGrid;
	struct	GdiDS	Gdi;

	Gdi.fDIBitmap = FALSE;
	GdiStart.pNext = NULL;
	pGdiNode = &GdiStart;

	if ((nGridX > 0) && (nGridY > 0))
	{
		for (iLoop = 0;iLoop < nGridX;iLoop++)
		{
			for (jLoop = 0;jLoop < nGridY;jLoop++)
			{
				Gdi.iGridX = iLoop;
				Gdi.iGridY = jLoop;

				pGdiNode = Add_Gdi(pGdiNode,Gdi);
			}
		}
	}
	else
	{
		nGrid = max(nGridX,nGridY);
		for (iLoop = 0;iLoop < nGrid;iLoop++)
		{
			if (nGridX > 0)
				Gdi.iGridX = iLoop;
			else
				Gdi.iGridX = 0;

			if (nGridY > 0)
				Gdi.iGridY = iLoop;
			else
				Gdi.iGridY = 0;

			pGdiNode = Add_Gdi(pGdiNode,Gdi);
		}
	}

	if (nGridX > 0)
		iWidthX = iWidth/nGridX;
	else
		iWidthX = iWidth;

	if (nGridY > 0)
		iHeightY = iHeight/nGridY;
	else
		iHeightY = iHeight;
}

// 裝入Winsock然后連接服務器
int LoadWinsock(HWND hWnd,char *szIP)
{
	WSADATA				wsd;
	DWORD				dwLen;
	int					nRet,nZero;
	LPBYTE				pBuf;
	WSAPROTOCOL_INFO	Protocol;
	char				szString[81];
	char				szMessage[81];

	if (WSAStartup(0x202,&wsd) != 0)
	{
		MessageBox(NULL,"hehe","Client Socket Error",MB_OK);
		return 1;
	}

	dwLen = 0;
	nRet = WSAEnumProtocols(NULL,NULL,&dwLen);
	if (nRet == SOCKET_ERROR)
	{
		if (WSAGetLastError() != WSAENOBUFS)
			return 1;
	}

	pBuf = malloc(dwLen);

	nRet = SelectProtocols(SETFLAGS,NOTSETFLAGS,(LPWSAPROTOCOL_INFO)pBuf,&dwLen,&Protocol);

	free(pBuf);

	sClient = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,SOCK_STREAM);
	if (sClient == INVALID_SOCKET)
		return 1;

	nZero = 0;
	setsockopt(sClient,SOL_SOCKET,SO_RCVBUF,(char *)&nZero,sizeof(nZero));

	server.sin_family = AF_INET;
	server.sin_port = htons(port);
	server.sin_addr.s_addr = inet_addr(szIP);

	if (connect(sClient,(struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR)
	{
		memset(szString,'\0',sizeof(szString));
		sprintf(szString,"Connect() failed: %d",WSAGetLastError());
		MessageBox(NULL,szString,"Client Socket Error",MB_OK);
		return 1;
	}

	GetResolution();
	SetGrids(hWnd);

	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"WM_COMP;%d;0;0;0;\0",iCompressionLevel);
	SendCommand(hWnd,1,szMessage);

	UpdateRegionalScreen(hWnd,sClient,TRUE);

	return 0;
}

void SetGrids(HWND hWnd)
{
	char	szMessage[81];
	Clear_Gdi(&GdiStart);
	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"WM_GRID;%d;%d;0;0;\0",nGridX,nGridY);
	SendCommand(hWnd,1,szMessage);
	InitGrids();
}

void GetResolution()
{
	int		iSend,iRecv;
	char	szMessage[81];
	char	szRecv[81];

	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"RESOLUTION\0");
	iSend = Send(sClient,szMessage);

	iRecv = Recv(sClient,szRecv,80);
	iWidth = atoi(szRecv);

	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"OK\0");
	iSend = Send(sClient,szMessage);

	iRecv = Recv(sClient,szRecv,80);
	iHeight = atoi(szRecv);

	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"OK\0");
	iSend = Send(sClient,szMessage);
}

int SendCommand(HWND hWnd,int iParm,char *szWMMessage)
{
	int		iSent;

	if (iParm == 0)
	{
		UpdateRegionalScreen(hWnd,sClient,FALSE);
	}
	else if (iParm == 1)
	{
		iSent = Send(sClient,szWMMessage);
	}
	return 0;
}

int Send(SOCKET Socket,char *szSend)
{
	int		iSent;
	fSending = TRUE;
	iSent = send(Socket,szSend,strlen(szSend),0);
	fSending = FALSE;
	return iSent;
}

int Recv(SOCKET Socket,char *szRecv,int iRecvLen)
{
	int		iRecv;
	fReceiving = TRUE;
	iRecv = recv(Socket,szRecv,iRecvLen,0);
	if (iRecv == SOCKET_ERROR || iRecv == 0)
		MessageBox(NULL,"NO DATA or SOCKET ERROR","Client",MB_OK);
	szRecv[iRecv] = '\0';
	fReceiving = FALSE;
	return iRecv;
}

void UpdateRegionalScreen(HWND hWnd,SOCKET sClient,BOOL fFirstTime)
{
	LPBMIH	lpBMIH;
	char	*pDIB;
	char	*pDIBCompress;
	char	*pStartDIB;
	DWORD	iSent,iRecv;
	DWORD	iCompLen,iNewLen,iRLELen,iStartPos;
	int		iGridX,iGridY;
	int		iUpdates,iLoop,iCompressions,jLoop;
	char	szMessage[81];

	struct	CommandList	CommandStart;
	struct	CommandList	*pCommandNode;
	struct	CommandDS	Command;
	char				*pDest;
	int					iLoc1,iLoc2,nChar;

	char				*pTempDIB;

	if (!fRefreshing)
	{
		CommandStart.pNext = NULL;
		fRefreshing = TRUE;
		strcpy(szMessage,REFRESH_MSG);
		iSent = Send(sClient,szMessage);
		memset(szMessage,'\0',sizeof(szMessage));
		iRecv = Recv(sClient,szMessage,80);
		if (iRecv == SOCKET_ERROR || iRecv == 0)
			MessageBox(NULL,"NO DATA or SOCKET ERROR","Client",MB_OK);
		iUpdates = atoi(szMessage);
		strcpy(szMessage,"OK\0");
		iSent = Send(sClient,szMessage);
		if (iUpdates > 0)
		{
			pGdiNode = GdiStart.pNext;
			for (iLoop = 0;iLoop < iUpdates;iLoop++)
			{
				pCommandNode = &CommandStart;
				memset(szMessage,'\0',sizeof(szMessage));
				iRecv = Recv(sClient,szMessage,80);
				if (iRecv == SOCKET_ERROR || iRecv == 0)
					MessageBox(NULL,"NO DATA or SOCKET ERROR","Client",MB_OK);
				iLoc1 = 0;
				while (pDest = strchr(szMessage,';'))
				{
					iLoc2 = pDest - szMessage;
					nChar = iLoc2 - iLoc1;
					memset(Command.szElement,'\0',sizeof(Command.szElement));
					strncpy(Command.szElement,&szMessage[iLoc1],nChar);
					pCommandNode = Add_Command(pCommandNode,Command);
					memset(&szMessage[iLoc2],':',1);
					iLoc1 = iLoc2 + 1;
				}

				pCommandNode = CommandStart.pNext;
				if (pCommandNode)
				{
					iCompressions = atoi(pCommandNode->Command.szElement);
					pCommandNode = pCommandNode->pNext;

					iGridX = atoi(pCommandNode->Command.szElement);
					pCommandNode = pCommandNode->pNext;
					iGridY = atoi(pCommandNode->Command.szElement);
					pCommandNode = pCommandNode->pNext;

					iStartPos = atol(pCommandNode->Command.szElement);
					pCommandNode = pCommandNode->pNext;

					iLen = atol(pCommandNode->Command.szElement);
					pCommandNode = pCommandNode->pNext;

					iCompLen = atol(pCommandNode->Command.szElement);
					pCommandNode = pCommandNode->pNext;
				}

				if (iLen > iCompLen)
					pDIBCompress = (char *)malloc(iLen);
				else
					pDIBCompress = (char *)malloc(iCompLen);

				while (pGdiNode)
				{
					if ((pGdiNode->Gdi.iGridX == iGridX) &&
						(pGdiNode->Gdi.iGridY == iGridY))
					{
						if (!pGdiNode->Gdi.fDIBitmap)
						{
							pGdiNode->Gdi.pDIBitmap = malloc(iLen);
							memset(pGdiNode->Gdi.pDIBitmap,0,iLen);

							pGdiNode->Gdi.lpBitmapIH = (LPBMIH)pGdiNode->Gdi.pDIBitmap;
							pGdiNode->Gdi.iWidth1 = iGridX * iWidthX;
							pGdiNode->Gdi.iWidth2 = iGridX * iWidthX + iWidthX;
							pGdiNode->Gdi.iHeight1 = iGridY * iHeightY;
							pGdiNode->Gdi.iHeight2 = iGridY * iHeightY + iHeightY;

							iScreenWidth = iWidth;
							iScreenHeight = iHeight;

							pGdiNode->Gdi.pDIB = (char *)malloc(iLen);
							pGdiNode->Gdi.pStartDIB = pGdiNode->Gdi.pDIB;
						}

						strcpy(szMessage,"OK\0");
						iSent = Send(sClient,szMessage);
						pStartDIB = pDIBCompress;
						Receive(sClient,pDIBCompress,iCompLen);
						pDIBCompress = pStartDIB;
						pStartDIB = pGdiNode->Gdi.pStartDIB;

						if (iCompressionLevel == 0)
						{
							memblast(pGdiNode->Gdi.pDIB,pDIBCompress,iLen);
							iNewLen = iLen;
						}
						else if (iCompressionLevel == 10)
						{
							iNewLen = HuffmanUnCompress((BYTE *)pDIBCompress,(BYTE *)pGdiNode->Gdi.pDIB);
						}
						else if (iCompressionLevel == 11)
						{
							for (jLoop = 0;jLoop < iCompressions;jLoop++)
							{
								iNewLen = HuffmanUnCompress((BYTE *)pDIBCompress,(BYTE *)pGdiNode->Gdi.pDIB);
								if ((jLoop + 1) < iCompressions)
									memblast(pDIBCompress,pGdiNode->Gdi.pDIB,iNewLen);
							}
						}
						else if (iCompressionLevel == 12) 
						{
							iNewLen = RunLengthDecode((BYTE *)pDIBCompress,(BYTE *)pGdiNode->Gdi.pDIB);
						}
						else if (iCompressionLevel == 13)
						{
							char	*pTempDIB;
							iLen = HuffmanGetSize((BYTE *)pDIBCompress);
							pTempDIB = (char *)malloc(iLen);
							iRLELen = HuffmanUnCompress((BYTE *)pDIBCompress,(BYTE *)pTempDIB);
							iNewLen = RunLengthDecode((BYTE *)pTempDIB,(BYTE *)pGdiNode->Gdi.pDIB);

							free(pTempDIB);
						}

						pGdiNode->Gdi.pDIB = pGdiNode->Gdi.pStartDIB;
						lpBMIH = (LPBMIH)pGdiNode->Gdi.pDIB;

						if (fFirstTime)
						{
							pTempDIB = pGdiNode->Gdi.pDIBitmap;
							memblast(&pGdiNode->Gdi.pDIBitmap[iStartPos],pGdiNode->Gdi.pDIB,iNewLen);

							pGdiNode->Gdi.fDIBitmap = TRUE;
						}
						else
						{
							pTempDIB = pGdiNode->Gdi.pDIBitmap;
							pDIB = pGdiNode->Gdi.pDIB;

							__asm
							{
								MOV		ECX,iNewLen 
								SHR		ECX,2 
								MOV		EDI,pTempDIB
								ADD		EDI,iStartPos
								MOV		ESI,pDIB
								Addition:
								LODSD
								ADD		[EDI],EAX
								ADD		EDI,4
								DEC		ECX
								JNZ		Addition
							}
						}

						Clear_Command(&CommandStart);
						strcpy(szMessage,"OK\0");
						iSent = Send(sClient,szMessage);
						break;
					}
					pGdiNode = pGdiNode->pNext;
				}

				free(pDIBCompress);
			}

			if (fFirstTime)
				fDIBitmap = TRUE;
			InvalidateRect(hWnd,NULL,FALSE);
		}
		fRefreshing = FALSE;
	}
}

DWORD Receive(SOCKET Socket,char *pData,DWORD iLength)
{
	WSAOVERLAPPED	olRecv;
	WSAEVENT	gheventOlSock;
	WSAEVENT	eventArray[2];

	WSABUF		buffRecv;
	DWORD		dwRet,dwNumBytes,dwFlags;
	int			nWSAError;
	DWORD		iNumBytes = 0;

	char		szError[81];

	gheventOlSock = WSACreateEvent();
	eventArray[0] = gheventOlSock;

	ZeroMemory(&olRecv,sizeof(WSAOVERLAPPED));
	olRecv.hEvent= gheventOlSock;
	buffRecv.len = iLength;
	buffRecv.buf = pData;

	fReceiving = TRUE;

	while (TRUE)
	{
		dwFlags = 0;
		dwNumBytes = 0;

		if ((dwRet = WSARecv(Socket,&buffRecv,1,&dwNumBytes,&dwFlags,&olRecv,NULL)) == SOCKET_ERROR) 
		{
			nWSAError = WSAGetLastError();
			if (nWSAError != ERROR_IO_PENDING)
			{
				sprintf(szError,"WSARecv failed with error %d\n",nWSAError);
				MessageBox(NULL,szError,"Client",MB_OK);
				return SOCKET_ERROR;
			}
		}

		if (WSAWaitForMultipleEvents(1,eventArray,FALSE,WSA_INFINITE,FALSE) == WSA_WAIT_FAILED) 
		{
			sprintf(szError,"WSAWaitForMultipleEvents failed %d\n", WSAGetLastError());
			MessageBox(NULL,szError,"Client",MB_OK);
		} 
		WSAResetEvent(eventArray[0]);
		if (WSAGetOverlappedResult(Socket,&olRecv,&dwNumBytes,FALSE,&dwFlags) == TRUE)
		{
			if (dwNumBytes == 0)
				break;
		} 
		else 
		{
			sprintf(szError,"WSAGetOverlappedResult failed with error %d\n", WSAGetLastError());
			MessageBox(NULL,szError,"Client",MB_OK);
			return SOCKET_ERROR;
		}
		buffRecv.len -= dwNumBytes;
		iNumBytes = iNumBytes + dwNumBytes;
		if (buffRecv.len == 0) 
			break;
		else 
			buffRecv.buf += dwNumBytes;
	}
	fReceiving = FALSE;
	return iNumBytes;
}

int SelectProtocols(DWORD dwSetFlags,DWORD dwNotSetFlags,LPWSAPROTOCOL_INFO lpProtocolBuffer,LPDWORD lpdwBufferLength,WSAPROTOCOL_INFO *pProtocol)
{
	LPBYTE				pBuf;
	LPWSAPROTOCOL_INFO	pInfo;
	DWORD				dwNeededLen;
	LPWSAPROTOCOL_INFO	pRetInfo;
	DWORD				dwRetLen;
	int					nCount;
	int					nMatchCount;
	int					nRet;

	dwNeededLen = 0;
	nRet = WSAEnumProtocols(NULL, NULL, &dwNeededLen);
	if (nRet == SOCKET_ERROR)
	{
		if (WSAGetLastError() != WSAENOBUFS)
			return SOCKET_ERROR;
	}

	pBuf = malloc(dwNeededLen);
	if (pBuf == NULL)
	{
		WSASetLastError(WSAENOBUFS);
		return SOCKET_ERROR;
	}

	nRet = WSAEnumProtocols(NULL,(LPWSAPROTOCOL_INFO)pBuf,&dwNeededLen);
	if (nRet == SOCKET_ERROR)
	{
		free(pBuf);
		return SOCKET_ERROR;
	}
	#define REJECTSET(f) \
	    ((dwSetFlags & f) && !(pInfo->dwServiceFlags1 & f))
	#define REJECTNOTSET(f) \
	    ((dwNotSetFlags &f) && (pInfo->dwServiceFlags1 & f))
	#define REJECTEDBY(f) (REJECTSET(f) || REJECTNOTSET(f))

	pInfo = (LPWSAPROTOCOL_INFO)pBuf;	
	pRetInfo = lpProtocolBuffer;
	dwRetLen = 0;
	nMatchCount = 0;
	for(nCount = 0; nCount < nRet; nCount++)
	{
		while(1)
		{
			if (REJECTEDBY(XP1_CONNECTIONLESS))
				break;
			if (REJECTEDBY(XP1_GUARANTEED_DELIVERY))
				break;
			if (REJECTEDBY(XP1_GUARANTEED_ORDER))
				break;
			if (REJECTEDBY(XP1_MESSAGE_ORIENTED))
				break;
			if (REJECTEDBY(XP1_PSEUDO_STREAM))
				break;
			if (REJECTEDBY(XP1_GRACEFUL_CLOSE))
				break;
			if (REJECTEDBY(XP1_EXPEDITED_DATA))
				break;
			if (REJECTEDBY(XP1_CONNECT_DATA))
				break;
			if (REJECTEDBY(XP1_DISCONNECT_DATA))
				break;
			if (REJECTEDBY(XP1_SUPPORT_BROADCAST)) 
				break;
			if (REJECTEDBY(XP1_SUPPORT_MULTIPOINT))
				break;
			if (REJECTEDBY(XP1_MULTIPOINT_DATA_PLANE))
				break;
			if (REJECTEDBY(XP1_QOS_SUPPORTED))
				break;
			if (REJECTEDBY(XP1_UNI_SEND))
				break;
			if (REJECTEDBY(XP1_UNI_RECV))
				break;
			if (REJECTEDBY(XP1_IFS_HANDLES))
				break;
			if (REJECTEDBY(XP1_PARTIAL_MESSAGE))
				break;

			dwRetLen += sizeof(WSAPROTOCOL_INFO);
			if (dwRetLen > *lpdwBufferLength)
			{
				WSASetLastError(WSAENOBUFS);
				*lpdwBufferLength = dwNeededLen;
				free(pBuf);
				return SOCKET_ERROR;
			}
			nMatchCount++;
			memblast(pRetInfo,pInfo,sizeof(WSAPROTOCOL_INFO));
			if (strcmp(pInfo->szProtocol,"MSAFD Tcpip [TCP/IP]") == 0)
				memblast(pProtocol,pInfo, sizeof(WSAPROTOCOL_INFO));

			pRetInfo++;
			break;
		}
		pInfo++;
	}
	free(pBuf);
	*lpdwBufferLength = dwRetLen;
	return(nMatchCount);
}

void memblast(void* dest,void* src,DWORD count)
{
	DWORD	iCount;

	__asm
	{
		MOV		ECX,count
		SHR		ECX,2
		SHL		ECX,2
		MOV		iCount,ECX
		MOV		ESI,src	
		MOV		EDI,dest
		MOV		ECX,iCount
		SHR		ECX,2	
		REP		MOVSD	

		MOV		ECX,count
		MOV		EAX,iCount
		SUB		ECX,EAX

		JZ		Exit
		MOV		ESI,src	
		ADD		ESI,EAX	
		MOV		EDI,dest
		ADD		EDI,EAX
		REP		MOVSB	
		Exit:
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级国产精品| 一本一道综合狠狠老| 欧美一区二区黄色| 麻豆freexxxx性91精品| 欧美一级爆毛片| 秋霞国产午夜精品免费视频| 91精品国产91热久久久做人人| 五月天中文字幕一区二区| 欧美一区二区视频在线观看| 日本不卡中文字幕| 久久伊人蜜桃av一区二区| 国产一区二区三区电影在线观看 | eeuss鲁片一区二区三区在线观看| 中文字幕国产一区| 91视频在线观看免费| 亚洲亚洲精品在线观看| 欧美一区二区三区喷汁尤物| 麻豆国产一区二区| 国产日韩欧美电影| 一本大道久久a久久综合婷婷| 夜夜爽夜夜爽精品视频| 欧美一区二区不卡视频| 国产精品羞羞答答xxdd| 成人免费在线视频观看| 91精品国产综合久久香蕉的特点| 九九国产精品视频| 亚洲日本免费电影| 制服.丝袜.亚洲.中文.综合| 国产在线精品一区二区不卡了| 国产日韩亚洲欧美综合| 欧美综合亚洲图片综合区| 麻豆国产欧美日韩综合精品二区| 中文乱码免费一区二区| 欧美久久高跟鞋激| 成人av网站免费观看| 日韩国产精品91| 日本一区二区三区dvd视频在线| 在线观看欧美黄色| 国产精品一区二区在线观看不卡| 亚洲人精品一区| wwwwxxxxx欧美| 欧美性生活久久| 国产成人精品亚洲日本在线桃色| 亚洲国产精品一区二区www在线| 久久久美女毛片| 欧美日韩精品欧美日韩精品一| 精品亚洲porn| 偷拍一区二区三区四区| 自拍偷拍国产精品| 久久精品日韩一区二区三区| 欧美精品乱码久久久久久按摩| 不卡的av中国片| 麻豆国产一区二区| 亚洲成av人在线观看| 国产欧美日韩久久| 日韩精品在线一区| 欧美日韩精品系列| 日本久久一区二区三区| 国产宾馆实践打屁股91| 久久99最新地址| 日韩精品一级二级| 亚洲午夜激情av| 亚洲免费观看高清完整| 中文字幕第一区综合| 精品粉嫩超白一线天av| 日韩欧美亚洲另类制服综合在线| 欧美自拍偷拍午夜视频| 97精品国产露脸对白| 粉嫩欧美一区二区三区高清影视| 蜜桃久久久久久| 三级久久三级久久| 婷婷开心激情综合| 亚洲mv大片欧洲mv大片精品| 亚洲免费观看高清完整版在线观看熊 | 日韩一级片在线播放| 欧美日韩亚洲综合在线| 色婷婷综合视频在线观看| 99re热这里只有精品视频| 国产不卡视频一区| 粉嫩av一区二区三区在线播放| 国产精品自产自拍| 韩国精品一区二区| 经典三级视频一区| 国产老肥熟一区二区三区| 国产麻豆视频一区二区| 国产露脸91国语对白| 国产成人日日夜夜| 国产成人av资源| 成人黄页毛片网站| 99久久精品免费| 在线观看欧美精品| 制服丝袜中文字幕亚洲| 日韩欧美国产午夜精品| 久久久亚洲综合| 亚洲国产成人午夜在线一区| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品国产三级国产普通话蜜臀| 国产精品美女久久久久久久| 亚洲免费三区一区二区| 亚洲午夜电影在线观看| 免费在线视频一区| 国产一区视频导航| 不卡视频一二三四| 精品视频在线免费看| 日韩女优av电影| 中文字幕高清一区| 亚洲国产综合在线| 久久精品国产99| 成人开心网精品视频| 色吊一区二区三区| 日韩欧美资源站| 国产精品久久午夜夜伦鲁鲁| 亚洲一区二区三区中文字幕| 蜜臂av日日欢夜夜爽一区| 粉嫩aⅴ一区二区三区四区五区| 91麻豆免费看| 91精品国产欧美一区二区成人| 久久精品视频免费观看| 亚洲中国最大av网站| 六月婷婷色综合| 99久久国产综合色|国产精品| 欧美日韩激情在线| www国产精品av| 亚洲综合免费观看高清完整版| 三级影片在线观看欧美日韩一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美变态凌虐bdsm| 中文字幕一区二区三| 日本麻豆一区二区三区视频| 成人免费视频国产在线观看| 欧美日韩电影在线播放| 国产人妖乱国产精品人妖| 亚洲一区二区三区在线播放| 国内外成人在线| 欧美主播一区二区三区美女| 久久久久久久久久美女| 婷婷综合五月天| 波多野结衣的一区二区三区| 欧美一区二区三区成人| 18成人在线视频| 国产精品综合一区二区三区| 欧美少妇性性性| 国产精品二三区| 激情五月婷婷综合| 欧美色爱综合网| 国产精品久久久99| 国模娜娜一区二区三区| 欧美日韩精品欧美日韩精品一| 综合欧美亚洲日本| 国产69精品久久777的优势| 日韩一区二区视频在线观看| 日韩毛片一二三区| 国产超碰在线一区| 久久亚洲私人国产精品va媚药| 午夜一区二区三区视频| 色综合久久久网| 亚洲国产精品av| 国产一区二区h| 日韩欧美视频一区| 蜜臀a∨国产成人精品| 欧美日韩一区二区在线观看视频 | 国产成人精品亚洲日本在线桃色| 欧美一区二区视频免费观看| 亚洲电影一级黄| 在线影视一区二区三区| 亚洲人亚洲人成电影网站色| aaa欧美色吧激情视频| 欧美国产日韩一二三区| 国产精品亚洲人在线观看| 久久久精品免费网站| 九色|91porny| 久久久精品综合| 国模娜娜一区二区三区| 久久色视频免费观看| 国产毛片精品一区| 久久久激情视频| 成人动漫一区二区| 最新日韩在线视频| 91免费看片在线观看| 亚洲女厕所小便bbb| 91久久精品一区二区| 一区二区在线观看不卡| 在线观看亚洲精品视频| 亚洲国产精品一区二区www| 精品视频在线视频| 日本美女视频一区二区| 26uuu亚洲综合色欧美| 国产精品一区二区久久不卡| 国产欧美日本一区二区三区| 99国产精品久久久| 一区二区三区精品视频| 欧美日韩一区久久| 久久99国内精品| 国产欧美日产一区| 在线观看欧美黄色| 蜜桃视频免费观看一区| 国产日韩精品视频一区| 成人精品在线视频观看| 夜夜嗨av一区二区三区中文字幕| 欧美久久久久久久久|