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

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

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

2020-01-26 14:37:34
字體:
來源:轉載
供稿:網友

本文實例為大家分享了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
精品亚洲一区二区三区| 久久久亚洲天堂| 国产精品入口福利| 日韩美女写真福利在线观看| 日韩日本欧美亚洲| 91久久精品国产91久久| 一本一本久久a久久精品综合小说| 成人性教育视频在线观看| 亚洲精品电影在线观看| 欧美性猛交xxxx乱大交3| 91久久久久久久久| 国产欧美精品va在线观看| 538国产精品视频一区二区| 欧美成人免费视频| 精品久久久久久中文字幕一区奶水| 日韩欧美精品中文字幕| 欧美日韩午夜激情| 国产精品一区二区三区久久| 日韩中文字幕在线| 91日韩在线视频| 欧美日韩国产在线看| 亚洲精品www久久久久久广东| 日韩高清电影好看的电视剧电影| 91精品国产高清| 国产精品美女视频网站| 精品国产一区二区在线| 久久成年人视频| 久久久久女教师免费一区| 亚洲精品中文字幕av| 亚洲成人激情小说| 国产精品久久久久久搜索| 国产成人综合一区二区三区| 美乳少妇欧美精品| 91高潮在线观看| 久久综合亚洲社区| 日韩一区二区久久久| 自拍偷拍亚洲区| 亚洲第一页自拍| 日韩精品有码在线观看| 日韩激情av在线免费观看| 国产一区深夜福利| 亚洲国产一区二区三区四区| 国产不卡在线观看| 亚洲国产欧美精品| 欧美激情精品久久久久久免费印度| 在线视频中文亚洲| 国外成人在线视频| 91精品久久久久久久久久入口| 亚洲欧美色婷婷| 综合av色偷偷网| 久久久av免费| 欧美一级大胆视频| 国产啪精品视频| 日韩国产精品亚洲а∨天堂免| 久久精品色欧美aⅴ一区二区| 日韩欧美黄色动漫| 精品久久久久久久中文字幕| 日韩av在线免费看| 国产精品色午夜在线观看| 日韩一区av在线| 精品亚洲一区二区三区| 国产国语videosex另类| 亚洲桃花岛网站| 欧美成人精品激情在线观看| 欧美久久久精品| 欧美激情videoshd| 亚洲女人天堂网| 亚洲人成绝费网站色www| 国产综合视频在线观看| 日韩中文在线中文网在线观看| 国内精品久久久久久中文字幕| 久久久久久综合网天天| 九九精品在线视频| 亚洲欧美日韩中文在线| 日韩中文字幕在线精品| 欧美激情视频给我| 亚洲欧美日韩图片| 久久久久久高潮国产精品视| 久久国产精品久久久久| 欧美一级视频免费在线观看| 亚洲精品福利在线观看| 亚洲第一精品电影| 久久中文字幕国产| 国产精品免费看久久久香蕉| 欧美精品videos| 久99久在线视频| 最近2019中文字幕在线高清| 91亚洲精品久久久久久久久久久久| 国产日韩精品入口| 国产日韩中文字幕在线| 国产日韩欧美在线播放| 狠狠干狠狠久久| 狠狠躁夜夜躁人人爽超碰91| 668精品在线视频| 日韩欧美精品在线观看| 色多多国产成人永久免费网站| 97国产成人精品视频| 在线观看91久久久久久| 欧美日韩免费一区| 全球成人中文在线| 欧美另类极品videosbest最新版本| 国产91精品最新在线播放| 久久久久在线观看| 美日韩在线视频| 精品动漫一区二区| 欧美久久精品一级黑人c片| 日韩欧中文字幕| 青青久久aⅴ北条麻妃| 成人做爽爽免费视频| 岛国av一区二区| 亚洲一级黄色片| 国产亚洲精品久久久久久777| 欧美亚洲一区在线| 精品福利在线看| 亚洲欧美在线一区| 欧美高清videos高潮hd| 欧美有码在线观看| 亚洲品质视频自拍网| 久久久免费精品视频| 日韩欧美在线视频观看| www.xxxx欧美| 高清亚洲成在人网站天堂| 亚洲伊人一本大道中文字幕| 国产精品久久久久久久久借妻| 日韩成人在线电影网| 欧洲日本亚洲国产区| 亚洲人成电影在线播放| 日本精品一区二区三区在线播放视频| 九九九久久久久久| 久久成人亚洲精品| 久久久久久一区二区三区| 亚洲午夜av久久乱码| 96pao国产成视频永久免费| 日韩二区三区在线| 久久网福利资源网站| 亚洲另类欧美自拍| 精品久久久久久久久久国产| 国产视频丨精品|在线观看| 久久精品色欧美aⅴ一区二区| 久久免费国产视频| 日本在线精品视频| 欧美另类在线观看| 欧美性精品220| 一区二区三区四区视频| 尤物精品国产第一福利三区| 美日韩丰满少妇在线观看| 美日韩精品免费观看视频| 81精品国产乱码久久久久久| 国产精品久久久久福利| 久久精品人人做人人爽| 一本色道久久88综合日韩精品| 青草青草久热精品视频在线网站| 日韩一区在线视频| 91香蕉国产在线观看| 欧美成年人在线观看| 在线电影av不卡网址| 久久成年人免费电影| 最近中文字幕日韩精品| 亚洲自拍偷拍第一页| 亚洲精品白浆高清久久久久久| 欧美成人精品影院| 久久久精品999| 美女久久久久久久| 中文字幕在线观看亚洲|