亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++簡單QQ程序服務器端的實現代碼

2020-05-23 14:05:15
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了C++簡單QQ程序服務器端的實現代碼,感興趣的朋友可以參考一下
 

本文實例為大家分享了C++簡單QQ程序服務器端的實現代碼,供大家參考,具體內容如下

// ServerDlg.cpp : implementation file//#include "StdAfx.h"#include "Server.h"#include "ServerDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif #define WM_SHOWTASK  WM_USER+1#define WM_SERVER_ACCEPT WM_USER+2/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:  CAboutDlg();// Dialog Data  //{{AFX_DATA(CAboutDlg)  enum { IDD = IDD_ABOUTBOX };  //}}AFX_DATA  // ClassWizard generated virtual function overrides  //{{AFX_VIRTUAL(CAboutDlg)  protected:  virtual void DoDataExchange(CDataExchange* pDX);  // DDX/DDV support  //}}AFX_VIRTUAL// Implementationprotected:  //{{AFX_MSG(CAboutDlg)  //}}AFX_MSG  DECLARE_MESSAGE_MAP()}; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){  //{{AFX_DATA_INIT(CAboutDlg)  //}}AFX_DATA_INIT} void CAboutDlg::DoDataExchange(CDataExchange* pDX){  CDialog::DoDataExchange(pDX);  //{{AFX_DATA_MAP(CAboutDlg)  //}}AFX_DATA_MAP} BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)  //{{AFX_MSG_MAP(CAboutDlg)    // No message handlers  //}}AFX_MSG_MAPEND_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////// CServerDlg dialog CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)  : CDialog(CServerDlg::IDD, pParent){  //{{AFX_DATA_INIT(CServerDlg)  m_strShow = _T("");  //}}AFX_DATA_INIT  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);  m_People = 0;} void CServerDlg::DoDataExchange(CDataExchange* pDX){  CDialog::DoDataExchange(pDX);  //{{AFX_DATA_MAP(CServerDlg)  DDX_Control(pDX, IDC_STATIC_PEOPLE, m_strPeople);  DDX_Control(pDX, IDC_STATIC_HOST, m_strHost);  DDX_Text(pDX, IDC_EDIT_SHOW, m_strShow);  //}}AFX_DATA_MAP} BEGIN_MESSAGE_MAP(CServerDlg, CDialog)  //{{AFX_MSG_MAP(CServerDlg)  ON_WM_SYSCOMMAND()  ON_WM_PAINT()  ON_WM_QUERYDRAGICON()  ON_MESSAGE(WM_SHOWTASK,OnShowTask)  ON_MESSAGE(WM_SERVER_ACCEPT,OnServerAccept)  ON_WM_DESTROY()  ON_COMMAND(ID_EXIT,OnDlgExit)  ON_COMMAND(ID_SHOW,OnDlgShow)  ON_COMMAND(ID_HIDE,OnDlgHide)  //}}AFX_MSG_MAP  ON_STN_CLICKED(IDC_STATIC_HOST, &CServerDlg::OnStnClickedStaticHost)END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////// CServerDlg message handlers BOOL CServerDlg::OnInitDialog(){  CDialog::OnInitDialog();  // Add "About..." menu item to system menu.  // IDM_ABOUTBOX must be in the system command range.  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  ASSERT(IDM_ABOUTBOX < 0xF000);  CMenu* pSysMenu = GetSystemMenu(FALSE);  if (pSysMenu != NULL)  {    CString strAboutMenu;    strAboutMenu.LoadString(IDS_ABOUTBOX);    if (!strAboutMenu.IsEmpty())    {      pSysMenu->AppendMenu(MF_SEPARATOR);      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);    }  }  // Set the icon for this dialog. The framework does this automatically  // when the application's main window is not a dialog  SetIcon(m_hIcon, TRUE);     // Set big icon  SetIcon(m_hIcon, FALSE);    // Set small icon    InitNotify();  SetWindowText("服務器");//在對話框上面顯示標題          //1 加載Socket庫  InitSocket(); //2 初始化Socket庫  return TRUE; // return TRUE unless you set the focus to a control} VOID CServerDlg::GetHostInfor(){  char szHostName[128];  //獲得Shine-PC                                      // 存儲主機名  if (gethostname(szHostName,128)==0)                          //正確的情況  {    hostent* pHost;  //Host Content    pHost = gethostbyname(szHostName); //網卡信息                          //pHost返回的是指向主機的列表    LPCSTR psz = inet_ntoa(*(struct in_addr *)pHost->h_addr_list[0]);//得到指向ip的psz變量    CString strTemp;    strTemp += "主機名:";    strTemp += szHostName;    strTemp += " ";    strTemp+="IP地址:";    strTemp+=psz;    m_strHost.SetWindowText(strTemp);    CString strPeople;    strPeople.Format("%d",m_People);    m_strPeople.SetWindowText(strPeople);  }} VOID CServerDlg::InitSocket(){  WSADATA wsaData;  WSAStartup(MAKEWORD(2,2),&wsaData);  GetHostInfor();   //創建監聽套接字  m_sListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);   if(m_sListen==INVALID_SOCKET)  {    MessageBox("Create SOCKET Failed");    WSACleanup();     return;  }  //初始化網卡  //sockaddr_in(2.2) sockaddr(1.0)  m_ServerAddr.sin_family = AF_INET;  m_ServerAddr.sin_addr.s_addr = INADDR_ANY;  m_ServerAddr.sin_port = htons(9527);   //1.0  //綁定  if(bind(m_sListen,    (sockaddr*)&m_ServerAddr,sizeof(m_ServerAddr))==SOCKET_ERROR)  {    MessageBox("Bind Failed");    WSACleanup();     closesocket(m_sListen);    return;  }  //監聽  if(listen(m_sListen,20)==SOCKET_ERROR)  {    MessageBox("Listen Failed");    WSACleanup();     closesocket(m_sListen);    return;  }   WSAAsyncSelect(m_sListen,m_hWnd,WM_SERVER_ACCEPT,    FD_ACCEPT|FD_READ|FD_CLOSE);  for(int i=0;i<MAX;i++)  {    m_sClient[i] = INVALID_SOCKET;  }  m_strShow="Now server is working!/r/nWaiting for client's connecting .......";  UpdateData(false);  return;} void CServerDlg::OnSysCommand(UINT nID, LPARAM lParam){  if ((nID & 0xFFF0) == IDM_ABOUTBOX)  {    CAboutDlg dlgAbout;    dlgAbout.DoModal();  }  else  {    CDialog::OnSysCommand(nID, lParam);  }} // If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework. void CServerDlg::OnPaint() {  if (IsIconic())  {    CPaintDC dc(this); // device context for painting     SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);     // Center icon in client rectangle    int cxIcon = GetSystemMetrics(SM_CXICON);    int cyIcon = GetSystemMetrics(SM_CYICON);    CRect rect;    GetClientRect(&rect);    int x = (rect.Width() - cxIcon + 1) / 2;    int y = (rect.Height() - cyIcon + 1) / 2;     // Draw the icon    dc.DrawIcon(x, y, m_hIcon);  }  else  {    CDialog::OnPaint();  }} // The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CServerDlg::OnQueryDragIcon(){  return (HCURSOR) m_hIcon;} VOID CServerDlg::InitNotify(){  m_nid.cbSize = sizeof(NOTIFYICONDATA);  m_nid.hWnd = m_hWnd;  m_nid.uID = IDI_ICON_NOTIFY;   m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;   m_nid.uCallbackMessage = WM_SHOWTASK;  //自定義消息  在托盤上處理鼠標動作  m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_NOTIFY));   strcpy(m_nid.szTip,"點我");//當鼠標放在上面時,所顯示的內容   Shell_NotifyIcon(NIM_ADD,&m_nid);//在托盤區添加圖標 } LRESULT CServerDlg::OnShowTask(WPARAM wParam,LPARAM lParam){//wParam接收的是圖標的ID,而lParam接收的是鼠標的行為    if (wParam!=IDI_ICON_NOTIFY)  {    return 1;  }  switch(lParam)  {  case WM_RBUTTONUP:    {      CMenu Menu;      Menu.CreatePopupMenu();      Menu.AppendMenu(MF_STRING, ID_SHOW,"顯示");      Menu.AppendMenu(MF_STRING, ID_HIDE,"隱藏");        Menu.AppendMenu(MF_STRING, ID_EXIT,"退出");        CPoint Pt;      GetCursorPos(&Pt);     //得到鼠標位置      Menu.TrackPopupMenu(TPM_RIGHTBUTTON, Pt.x, Pt.y, this);      Menu.DestroyMenu();    //銷毀資源      break;    }  }  return 0;} void CServerDlg::OnDestroy() {  CDialog::OnDestroy();  Shell_NotifyIcon(NIM_DELETE,&m_nid);} void CServerDlg::OnDlgExit(){  SendMessage(WM_CLOSE,NULL,NULL);} void CServerDlg::OnDlgHide(){  ShowWindow(SW_HIDE);} void CServerDlg::OnDlgShow(){  ::ShowWindow(this->m_hWnd,SW_NORMAL);} //FD_ACCEPT FD_CLOSE  FD_READ LRESULT CServerDlg::OnServerAccept(WPARAM wParam,LPARAM lParam){  // WSAGETSELECTEVENT == LOWORD(lParam)  int iEvent = WSAGETSELECTEVENT(lParam);  //調用Winsock API函數,得到網絡事件類型  switch(iEvent)   {   case FD_ACCEPT://客戶端連接請求事件     {      OnAccept();  //用戶的上線請求  Connect      break;    }  case FD_CLOSE://客戶端斷開事件:     {       OnClose(wParam);  //WParam 誰被關閉      break;    }     case FD_READ://網絡數據包到達事件     {      OnRecive(wParam);  //Send       break;    }  default: break;   }   return 0;} VOID CServerDlg::OnRecive(WPARAM wParam){  SENDINFOR Data = {0};  int i = 0;  for (i=0;i<MAX;i++)  {    if (m_sClient[i]==wParam)    {      break;    }  }  if (i==MAX)   {    return;  }  int iRet = recv(m_sClient[i],(char*)&Data,sizeof(Data),0);  //0    關羽     //消息類型 用戶名稱 信息內容  //分析數據包  switch(Data.iType)  {  case 20:  case 6:    {      //6 11 對方已接受請求,建立連接.......       int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET&&          strcmp(m_PeopleInfor[j].strName.LockBuffer(),Data.szName)==0)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }      break;    }  case 7:    {      int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET&&          strcmp(m_PeopleInfor[j].strName.LockBuffer(),Data.szName)==0)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }      break;    }  case 5:  //11 -12      {      //11--->12      //5 12 11|1.txt|5|      //5 12 192.168.0.100|11|1.txt|5|  --->12       CString strTemp;        strTemp+=m_PeopleInfor[i].strIp;      strTemp+="|";      strTemp+=Data.szMsg;             strcpy(Data.szMsg,strTemp.LockBuffer());         int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET&&          strcmp(m_PeopleInfor[j].strName.LockBuffer(),Data.szName)==0)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }       break;    }   case 120:    {      int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET&&          strcmp(m_PeopleInfor[j].strName.LockBuffer(),Data.szName)==0)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }      break;    }  case 110:    {      int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET&&j!=i)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }      break;    }  case 2:    {      int j = 0;      for (j=0;j<MAX;j++)      {        if (strcmp(m_PeopleInfor[j].strName,Data.szName)==0          &&m_sClient[j]!=INVALID_SOCKET)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);          break;        }      }      break;    }  case 1:      {      int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET&&j!=i)        {          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }      break;    }  case 0:  //New People    {      m_PeopleInfor[i].strName = Data.szName;      //向控件添加數據      OnlineOrOutline(i,"上線");      //刷新用戶鏈表      //1向老的通知新的用戶(自己得到自己)      int j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET)        {          CString Temp;          Data.iType = 0;          strcpy(Data.szName,m_PeopleInfor[i].strName);           Temp +="/r/n";          GetCurrentTime();          Temp+=m_Timer.LockBuffer();          Temp+="系統消息:/r/n ";          Temp+=m_PeopleInfor[i].strName;          Temp+="進入聊天室";          strcpy(Data.szMsg,Temp.LockBuffer());          send(m_sClient[j],(char*)&Data,sizeof(Data),0);        }      }      //向新的通知老的用戶      j = 0;      for (j=0;j<MAX;j++)      {        if (m_sClient[j]!=INVALID_SOCKET && j!=i)        {          Data.iType = 0;          memset(Data.szMsg,0,400);          strcpy(Data.szName,m_PeopleInfor[j].strName);           send(m_sClient[i],(char*)&Data,sizeof(Data),0);        }      }      break;    }  }}  VOID CServerDlg::OnAccept(){  int i = 0;  for (i=0;i<MAX;i++)  {    if (m_sClient[i]==INVALID_SOCKET)    {      break;    }  }  if (i==MAX)  {    return;  }  sockaddr_in ClientAddr;  int nLen = sizeof(sockaddr_in);  m_sClient[i] = accept(m_sListen,(sockaddr*)&ClientAddr,&nLen);  LPCSTR strIP = inet_ntoa(*(struct in_addr*)&ClientAddr.sin_addr);  m_PeopleInfor[i].strIp = strIP;  m_People++;  CString strPeople;  strPeople.Format("%d",m_People);  m_strPeople.SetWindowText(strPeople);  UpdateData(FALSE);} VOID CServerDlg::GetCurrentTime(){  SYSTEMTIME st = {0};  GetLocalTime(&st);   int j = 0;  j = sprintf(m_Timer.LockBuffer(),"%d年",st.wYear);  j += sprintf(m_Timer.LockBuffer()+j,"%d月",st.wMonth);  j += sprintf(m_Timer.LockBuffer()+j,"%d日",st.wDay);  j += sprintf(m_Timer.LockBuffer()+j,"%d時",st.wHour);  if (st.wMinute<10)   {    int i = 0;    j += sprintf(m_Timer.LockBuffer()+j,"%d",i);   }  j += sprintf(m_Timer.LockBuffer()+j,"%d分鐘",st.wMinute);  if (st.wSecond<10)   {    int i = 0;    j += sprintf(m_Timer.LockBuffer()+j,"%d",i);   }  j += sprintf(m_Timer.LockBuffer()+j,"%d秒",st.wSecond);} VOID CServerDlg::OnlineOrOutline(int iIndex,CString YesOrNo){  CString strTemp;  GetCurrentTime();  strTemp+=m_Timer.LockBuffer();  strTemp+=' ';  strTemp+="用戶:";  strTemp+= m_PeopleInfor[iIndex].strName;  strTemp+=" ";  strTemp+=m_PeopleInfor[iIndex].strIp;  strTemp+= YesOrNo;  m_strShow +="/r/n";  m_strShow += strTemp;  UpdateData(FALSE);} VOID CServerDlg::OnClose(WPARAM wParam){  int i = 0;  for (i=0;i<MAX;i++)  {    if (m_sClient[i]==wParam)    {      break;    }  }  if (i==MAX)  {    return;  }  OnlineOrOutline(i,"下線");  m_People--;  CString strPeople;  strPeople.Format("%d",m_People);  m_strPeople.SetWindowText(strPeople);  SENDINFOR Data;  int j = 0;  for (j=0;j<MAX;j++)  {    if (m_sClient[j]!=INVALID_SOCKET&&j!=i)    {      Data.iType = -1;      CString strMsg;      GetCurrentTime();      strMsg+=m_Timer.LockBuffer();      strMsg+=m_PeopleInfor[i].strName;      strMsg+="退出了該聊天室";       strcpy(Data.szName,m_PeopleInfor[i].strName.LockBuffer());      strcpy(Data.szMsg,strMsg.LockBuffer());       send(m_sClient[j],(char*)&Data,sizeof(Data),0);    }  }  //清空退出用戶的資源  closesocket(m_sClient[i]);  m_sClient[i] = INVALID_SOCKET;  m_PeopleInfor[i].strIp = "";  m_PeopleInfor[i].strName = "";}    void CServerDlg::OnStnClickedStaticHost(){  // TODO: 在此添加控件通知處理程序代碼}

以上就是本文的全部內容,希望對大家的學習有所幫助。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品日本亚洲| 久久99国产综合精品女同| 欧美日本啪啪无遮挡网站| 久久人人爽人人爽人人片av高请| 久久久视频在线| 国产91精品高潮白浆喷水| 欧美精品videosex性欧美| 欧美激情国内偷拍| 欧美日韩高清区| 日韩国产欧美精品在线| 欧美一区视频在线| 性视频1819p久久| 中文亚洲视频在线| 91社区国产高清| 亚洲午夜国产成人av电影男同| 国产欧美最新羞羞视频在线观看| 欧亚精品中文字幕| 国产精品嫩草视频| 精品国产一区av| 91精品综合视频| 日韩亚洲欧美中文高清在线| 亚洲xxx视频| 久久精品亚洲热| 奇米成人av国产一区二区三区| 久久久在线视频| 欧美日韩不卡合集视频| 国产欧亚日韩视频| 欧美精品在线免费观看| 亚洲经典中文字幕| 成人国产精品一区| 久久精品国产2020观看福利| 日本免费一区二区三区视频观看| 精品久久久国产| 91豆花精品一区| 欧美日韩亚洲激情| 国产精品久久久久久久久久99| 国产精品jizz在线观看麻豆| 激情久久av一区av二区av三区| 亚洲片在线观看| 国产成人福利夜色影视| 国产日本欧美一区二区三区| 久久视频免费在线播放| 色综合久久久久久中文网| 91精品在线一区| 亚洲天堂2020| 热久久视久久精品18亚洲精品| 久久亚洲精品视频| 国产精品美女999| 亚洲无线码在线一区观看| 日韩免费观看视频| 亚洲欧美日韩中文在线制服| 久久免费视频在线| 日韩视频免费大全中文字幕| 日韩成人中文字幕在线观看| 国产精品狠色婷| 欧美日韩一区二区三区在线免费观看| 91亚洲精品一区二区| 69久久夜色精品国产69| 欧美高清无遮挡| 成人深夜直播免费观看| 欧美另类第一页| 亚洲精品国产精品久久清纯直播| 91精品国产九九九久久久亚洲| 97精品伊人久久久大香线蕉| 精品亚洲aⅴ在线观看| 国产日韩欧美影视| 91精品啪aⅴ在线观看国产| 欧美日韩不卡合集视频| 国产精品久久久久久婷婷天堂| 欧美丰满少妇xxxxx| 精品欧美国产一区二区三区| 欧美人与性动交a欧美精品| 成人看片人aa| 国产精品亚洲аv天堂网| 久久手机免费视频| 成人免费网站在线| 久久伊人91精品综合网站| 亚洲福利视频久久| 欧美视频在线观看 亚洲欧| 91精品中文在线| 岛国av一区二区三区| 性色av一区二区三区| 午夜精品一区二区三区在线播放| 久久6精品影院| 97国产suv精品一区二区62| 日韩欧美国产免费播放| 久久精品国产久精国产一老狼| 亚洲r级在线观看| 午夜精品蜜臀一区二区三区免费| 午夜精品国产精品大乳美女| 丰满岳妇乱一区二区三区| 性色av一区二区三区| 久久综合伊人77777尤物| 4438全国亚洲精品在线观看视频| 欧美国产在线电影| 国产97人人超碰caoprom| 亚洲午夜女主播在线直播| 欧美一级片一区| 91精品免费看| 亚洲深夜福利视频| 成人97在线观看视频| 日韩精品免费在线视频观看| 精品国产一区二区三区久久| 久久精品免费播放| 国产第一区电影| 夜夜嗨av一区二区三区免费区| 国产一区二区动漫| 日本欧美黄网站| 日韩一区二区在线视频| 久久精视频免费在线久久完整在线看| 91免费综合在线| 亚洲欧美日韩精品久久亚洲区| 欧美日韩国产激情| 91亚洲一区精品| 福利一区视频在线观看| 日韩美女福利视频| 九九视频直播综合网| 国产精品久久久久久久午夜| 中文字幕亚洲无线码a| 日韩av理论片| 久久久女女女女999久久| 91久久综合亚洲鲁鲁五月天| …久久精品99久久香蕉国产| 亚洲成人免费网站| 国产欧美亚洲精品| 国产精品一久久香蕉国产线看观看| 欧美性xxxx极品高清hd直播| 亚洲第一福利网站| 国产国产精品人在线视| 久久久久亚洲精品国产| 久久久久久一区二区三区| 欧美在线观看www| 久久精品亚洲国产| 91亚洲永久免费精品| 亚洲成人久久网| 日韩美女av在线| 国产日韩精品综合网站| 欧美第一页在线| 成人深夜直播免费观看| 日韩精品免费电影| 亚洲欧美在线免费| 亚洲电影成人av99爱色| 中文字幕日韩精品有码视频| 尤物九九久久国产精品的分类| 久久精品91久久久久久再现| 欧美第一淫aaasss性| 夜夜躁日日躁狠狠久久88av| 国产精品永久在线| 在线a欧美视频| 亚洲一区亚洲二区亚洲三区| 国自在线精品视频| 日韩福利伦理影院免费| 国产精品永久免费观看| 国产欧美精品日韩精品| 自拍视频国产精品| 欧美激情精品久久久久久蜜臀| 日韩中文第一页| 欧美性少妇18aaaa视频| 亚洲国产私拍精品国模在线观看| 欧美在线不卡区| 精品视频在线观看日韩| 97视频在线观看亚洲| 成人乱色短篇合集| 欧美电影免费播放|