亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
jiyouzz国产精品久久| 精彩视频一区二区| 婷婷夜色潮精品综合在线| 国产一区二区三区精品视频| 91国模大尺度私拍在线视频| 国产欧美日韩在线观看| 91精品国产色综合久久不卡电影 | 成人综合婷婷国产精品久久 | 粉嫩蜜臀av国产精品网站| 欧洲亚洲精品在线| 日本一区二区视频在线| 久久精品国产精品亚洲精品| 欧美日韩在线不卡| 亚洲免费观看在线视频| 国产成人自拍在线| 精品国产精品一区二区夜夜嗨| 亚洲精品写真福利| 日韩午夜精品视频| 亚洲欧美韩国综合色| 国产成人精品亚洲午夜麻豆| 亚洲日本欧美天堂| 国产精品影视在线| 久久综合色综合88| 韩国中文字幕2020精品| 欧美一卡二卡在线| 免费不卡在线视频| 日韩免费视频线观看| 老汉av免费一区二区三区| 日韩一级完整毛片| 免费在线观看一区| 日韩免费一区二区三区在线播放| 日韩av午夜在线观看| 日韩精品中文字幕一区二区三区| 日本 国产 欧美色综合| 日韩三级视频中文字幕| 久草精品在线观看| 久久久99久久| 成人av在线播放网址| 国产精品乱人伦中文| 9久草视频在线视频精品| 亚洲人成网站影音先锋播放| 在线观看www91| 日本欧美加勒比视频| 欧美大白屁股肥臀xxxxxx| 九色|91porny| 亚洲国产精品v| 99国产精品国产精品毛片| 亚洲伦在线观看| 69精品人人人人| 精品无人码麻豆乱码1区2区| 国产三级欧美三级| 97精品超碰一区二区三区| 亚洲影视在线播放| 欧美白人最猛性xxxxx69交| 国产精品中文字幕一区二区三区| 国产精品久久久久9999吃药| 色综合色狠狠综合色| 婷婷一区二区三区| 国产无遮挡一区二区三区毛片日本| 波多野结衣中文一区| 免费成人av在线| 国产精品网站在线| 欧美日韩一区二区三区免费看| 久久99精品久久只有精品| 中文字幕不卡在线| 欧美精选一区二区| 国产成人av一区二区三区在线| 夜夜揉揉日日人人青青一国产精品| 欧美一区欧美二区| av电影天堂一区二区在线| 91精品国产福利| 亚洲精品一区二区三区精华液| 国产乱码精品一区二区三区忘忧草 | 精彩视频一区二区三区| 国产欧美精品一区aⅴ影院| 日本丰满少妇一区二区三区| 美女一区二区久久| 亚洲人精品一区| www成人在线观看| 日本高清视频一区二区| 国产高清不卡一区二区| 日韩精品三区四区| 日韩伦理av电影| 久久蜜桃一区二区| 欧美精品 日韩| 91麻豆福利精品推荐| 国产精品99久久久久久久女警| 亚洲一区av在线| 国产精品初高中害羞小美女文| 日韩欧美精品在线| 欧美日韩国产综合一区二区三区| 欧美日韩性生活| 成人av手机在线观看| 六月丁香婷婷色狠狠久久| 亚洲成人综合视频| 亚洲精品中文在线| 国产精品久久99| 国产人妖乱国产精品人妖| 日韩欧美国产综合| 欧美高清hd18日本| 欧美日韩成人在线一区| 在线视频你懂得一区二区三区| av电影在线观看完整版一区二区| 国产精品羞羞答答xxdd| 麻豆精品国产传媒mv男同| 丝袜美腿高跟呻吟高潮一区| 亚洲制服丝袜一区| 日本一区二区免费在线| 欧美成人一区二区三区在线观看| 欧美欧美欧美欧美首页| 欧洲一区二区av| 色婷婷激情一区二区三区| 91天堂素人约啪| 不卡av电影在线播放| 99视频一区二区三区| 成人黄色综合网站| 99热国产精品| 91免费看视频| 色呦呦一区二区三区| 在线看日本不卡| 欧美性猛交xxxxxx富婆| 欧洲精品在线观看| 欧美日韩中文另类| 91精品视频网| 日韩久久精品一区| 久久久久久久久久久99999| 国产亚洲欧美日韩在线一区| 欧美极品aⅴ影院| 中文字幕在线一区二区三区| 一区二区三区日韩在线观看| caoporm超碰国产精品| 精品一区二区免费在线观看| 久久99国产精品久久| 国产乱对白刺激视频不卡| 国产成人午夜视频| 色香色香欲天天天影视综合网| 欧美视频在线一区二区三区| 日韩一区二区三区电影在线观看| 精品国产免费人成在线观看| 国产欧美精品国产国产专区| 日韩一区欧美小说| 午夜精品久久久久影视| 久久aⅴ国产欧美74aaa| 成人av电影免费在线播放| 91精品1区2区| 精品三级av在线| 国产精品不卡在线观看| 日韩主播视频在线| 国产一区二区免费在线| 91浏览器在线视频| 日韩免费高清av| 国产精品久久久久久久久久久免费看| 亚洲综合色噜噜狠狠| 久久国产精品72免费观看| 北条麻妃一区二区三区| 欧美日韩国产一二三| 国产偷国产偷精品高清尤物| 一区二区欧美在线观看| 国产一级精品在线| 欧美在线小视频| 欧美激情综合网| 日韩电影在线一区二区三区| 9l国产精品久久久久麻豆| 欧美一区二区三区色| 亚洲色图色小说| 韩国在线一区二区| 在线电影一区二区三区| 国产精品久久久久影视| 奇米影视一区二区三区| 91亚洲国产成人精品一区二区三 | 成人av一区二区三区| 欧美精品成人一区二区三区四区| 国产精品久久久久久久久免费樱桃 | 中文字幕二三区不卡| 青青青爽久久午夜综合久久午夜| 日本精品一级二级| 中文字幕乱码日本亚洲一区二区| 喷白浆一区二区| 欧美日韩国产首页在线观看| 中文字幕一区二区三区在线播放| 久久精品72免费观看| 欧美伦理视频网站| 亚洲综合色成人| 97久久精品人人爽人人爽蜜臀| 久久久精品日韩欧美| 免费成人结看片| 欧美一区二区女人| 亚洲第一在线综合网站| 色噜噜狠狠成人网p站| 亚洲欧洲性图库| av电影天堂一区二区在线观看| 国产三级一区二区三区| 国产老妇另类xxxxx| 精品国产一区二区国模嫣然| 蜜桃av一区二区三区电影| 欧美精品粉嫩高潮一区二区| 亚洲成人av一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 一区二区三区精品视频| 欧美综合在线视频|