日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

即时通讯系统————基于TCP协议的C/S架构(Client)

發布時間:2023/12/20 windows 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 即时通讯系统————基于TCP协议的C/S架构(Client) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

客戶端頭文件

#ifndef CLIENT_H #define CLIENT_H#include <string.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <time.h> #include <unistd.h>#define FAILURE 10000 #define SUCCESS 10001 #define FALSE 10002 #define TRUE 10003#define PORT 8888 struct sockaddr_in server_addr;enum Enum {REG,LOGIN,PRIVATE,GROUP, };typedef enum Enum ENUM; struct user {char petname[32];char age[32] ;char sex[32] ;char key[32];int cmd;int member;char buf[32]; }; typedef struct user User;struct judge {int cmd;char buf[32];char petname[32];char t2[128]; }; typedef struct judge Judge;struct info {int ToFd;char petname[32];char ptr[64]; }; typedef struct info InFo;void menu(); void menu2(); void Register(int sockfd); //實現用戶注冊 int Login(int sockfd); //登錄 void showfriend(int sockfd, char ptr[32]); //顯示在線好友 int exitlogin(int sockfd, char ptr[32]); //退出登錄 int chatprivate(int sockfd, char ptr[32]); //私聊 void deposit(int sockfd, char ptr[32]); //充值會員 void checkrecord(int sockfd, char ptr[32]); //查看與某人的私聊記錄 void key(int sockfd); //修改密碼 void groupchat(int sockfd, int L, char ptr[32]); //發起群聊 void cancel(int sockfd, char ptr[32]); //注銷賬號 void groupcheck(int sockfd); //查看群聊記錄 void praise(int sockfd); //點贊好友 int convert(int sockfd, char ptr[32]); //傳輸文件 char *MyGetch(); //實現密碼不回顯 #endif

?客戶端自定義功能函數

?

/**************************************************************> File Name: ChatClient.c> Author: yangxuan> Mail: 2503327051@qq.com > Created Time: 2018年08月23日 星期四 17時39分14秒**************************************************************/#include <stdio.h> #include "Client.h" #include <stdlib.h> #include <string.h> #include <termios.h>#define MAX_PASSWD_LEN 6//全局變量 char str[32] = {0}; char petname[32] = {0}; //記下注冊的用戶名 int ret; //用來接收多個函數執行的返回值//菜單, 顯示該通訊錄所能實現的功能 void menu() {system("clear");printf("*********************************\n");printf("********1,注冊 ******************\n");printf("********2, 登錄 ******************\n");printf("********3, 查看在線好友 ***********\n");printf("********4, 私聊 ******************\n");printf("********5, 群聊 ******************\n");printf("********6, 查看群聊信息 ***********\n");printf("********7, 查看私聊記錄 ***********\n");printf("********8, 注銷帳號****************\n");printf("********9, 充值會員****************\n");printf("********10, 點贊 ******************\n");printf("********11, 退出登錄 **************\n");printf("********12, 傳輸文件 **************\n");printf("*******13,查看接受文件 ************\n");printf("******請選擇你想要的功能 ***********\n");printf("***********************************\n"); }/*作者:楊宣函數原型:void Register(int sockfd)函數解釋:自定義函數, 函數名 :Register 帶有一個int型的參數,函數返回值為void型的函數功能:實現用戶注冊帳號功能 ,若密碼輸入不一致,提示重新輸入*/ void Register(int sockfd) {system("clear"); //執行之前先清屏User SendInfo; //先定義結構體中間變量,保存用戶的注冊信息,信息錄好后再將其拷貝到結構體中char age[32] = {0};char sex[32] = {0};char key[32] = {0};char key2[32] = {0};char buf[32] = {0};printf("請給自己取個昵稱!\n");scanf("%s", petname);printf("請輸入你的年齡!\n");scanf("%s", age);printf("請輸入您的性別!\n");scanf("%s", sex);printf("請輸入六位密碼!\n");getchar(); //一定要加這句,清空緩沖區的回車鍵,下面輸密碼也要加strcpy(key, MyGetch());printf("請再次輸入密碼!\n");strcpy(key2, MyGetch());while(strcmp(key, key2) != 0){memset(key, 0, sizeof(key));memset(key2, 0, sizeof(key2));printf("您兩次密碼輸入不一致, 請重新輸入密碼!\n");printf("請輸入六位密碼!\n");strcpy(key, MyGetch());printf("請再次輸入密碼!\n");strcpy(key2, MyGetch());}strcpy(SendInfo.petname, petname);strcpy(SendInfo.age, age);strcpy(SendInfo.sex, sex);strcpy(SendInfo.key, key);SendInfo.cmd = 1;ret = send(sockfd, &SendInfo, sizeof(SendInfo), 0);if(ret == -1){perror("send3");} }/*作者:楊宣函數原型:void key(int sockfd)函數解釋:自定義函數, 函數名 :key 函數帶有一個int型的參數, 函數返回值為void型的函數功能:用戶注冊好后設置密保 */ void key(int sockfd) {User SendInfo;memset(&SendInfo, 0, sizeof(SendInfo));SendInfo.cmd = 15;strcpy(SendInfo.petname, petname); //注冊好后設置密保printf("請設置密保問題,方便日后找回密碼!\n");printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.age);printf("爸爸的爺爺叫什么?\n");scanf("%s", SendInfo.sex);printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.key);ret = send(sockfd, &SendInfo, sizeof(SendInfo), 0);if(ret == -1){perror("send3");} }/*作者:楊宣函數原型:int Login(int sockfd)函數解釋:自定義函數, 函數名 :Login 函數帶有一個int型的參數, 函數返回值為void型的函數功能:用戶登錄 */ int Login(int sockfd) {system("clear"); //每次調用的時候都清屏,提升界面視覺化體驗感int ret;char buf[32] = {0};User U;char petname[32] = {0};char key[32] = {0};printf("請輸入昵稱!\n");scanf("%s", petname);printf("請輸入密碼!\n");getchar();strcpy(key, MyGetch());strcpy(U.petname, petname);strcpy(U.key, key);U.cmd = 2;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send2");}return FAILURE; }/*作者:楊宣函數原型:void showfriend(int sockfd, char ptr[32])函數說明:自定義函數, 函數名 :showfriend 函數帶有一個int型的參數, 函數返回值為void型的函數功能:查詢在線好友*/ void showfriend(int sockfd, char ptr[32]) {system("clear");User U;U.cmd = 3;int ret;char buf[32] = {0};strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendf");} }/*作者:楊宣函數原型:int exitlogin(int sockfd, char ptr[32])函數說明:自定義函數, 函數名 :exitlogin 函數帶有一個int型的參數, 函數返回值為void型的函數功能:發送用戶想要退出登錄信息給服務端 */ int exitlogin(int sockfd, char ptr[32]) {system("clear");char buf[32] = {0};printf("確認退出登錄嗎?, y or n\n"); //再次確認是否要退出scanf("%s", buf);User U;U.cmd = 11;if(strcmp(buf, "y") == 0){strcpy(U.petname, ptr);printf("ptr%s\n", U.petname);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendlogin");}}else{printf("謝謝你留下來, 快找好友嘮嗑吧!\n");sleep(2);return SUCCESS;}return FAILURE; }/*作者:楊宣函數原型:int chatprivate(int sockfd, char ptr[32])函數說明:自定義函數, 函數名 :chatprivate 函數帶有一個int型的參數, 一個char型的數組, 函數返回值為void型的參1:發送線程的文件描述符 參2:私聊發起人的昵稱函數功能:向服務器發送私聊申請 */ int chatprivate(int sockfd, char ptr[32]) {system("clear"); User U;char buf[32] = {0};printf("請選擇私聊對象!\n");scanf("%s", U.petname);printf("輸入發送的話\n");scanf("%s", U.age);//strcpy(U.petname, buf);strcpy(U.buf, ptr);U.cmd = 4;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendpri");}return 0; }/*作者:楊宣函數原型:void deposit(int sockfd, char ptr[32])函數說明:自定義函數, 函數名 :deposit 函數帶有一個int型的參數, 一個char型的數組, 函數返回值為void型的參1:發送線程的文件描述符 參2:私聊發起人的昵稱函數功能:向服務器發起 充值會員信息*/ void deposit(int sockfd, char ptr[32]) {system("clear");User U;printf("每月付費8元,可享受綠鉆會員特權!\n");printf("每月付費15元,可享受皇冠會員特權!\n");printf("每月付費20元,可享受王者特權!\n");printf("***請選擇你想要享受哪種特權****\n");printf("1, 綠鉆, 2,皇冠 3,王者 \n");scanf("%d", &U.member);U.cmd = 9;strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendmem");} }/*作者:楊宣函數原型:void praise(int sockfd)函數說明:自定義函數, 函數名 :praise 函數帶有一個int型的參數, 函數返回值為void型的函數功能:發送用戶想要點贊好友的信息給客戶端 */ void praise(int sockfd) {system("clear");User U;printf("請選擇你想點贊的好友名\n");scanf("%s", U.petname);U.cmd = 10;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendprise");} }/*作者:楊宣函數原型:void checkrecord(int sockfd, char ptr[32])函數說明:自定義函數, 函數名 :checkrecord 函數帶有一個int型的參數, 一個char型的數組, 函數返回值為void型的參1:發送線程的文件描述符 參2:私聊發起人的昵稱函數功能:向服務器發起 查詢與某人私聊記錄 請求*/ void checkrecord(int sockfd, char ptr[32]) {system("clear");User U;printf("你想查看與哪個好友的聊天記錄\n");scanf("%s", U.petname);U.cmd = 7;strcpy(U.buf, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendcheck");} }/*作者:楊宣函數原型:void groupchat(int sockfd, int L, char ptr[32])函數說明:函數 帶有兩個int 型參數,一個char 型數組 返回值:void 型函數功能:發送群聊邀請給服務器*/ void groupchat(int sockfd, int L, char ptr[32]) {system("clear");User U;//L = 0;printf("請給群聊起個名字\n");scanf("%s", U.sex);while(1){printf("請輸入你想邀請進行群聊的好友名, 輸入ok 確認邀請完畢\n");scanf("%s", U.petname);if(strcmp(U.petname, "ok") == 0){printf("群聊邀請已發送!\n");break;}U.cmd = 5;strcpy(U.age, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendgroup");}} }/*作者:楊宣函數原型:void cancel(int sockfd, char ptr[32])函數說明:形參為套接字,該客戶端登錄賬號昵稱,返回值void函數功能:注銷賬號 */ void cancel(int sockfd, char ptr[32]) {User U;strcpy(U.petname, ptr);U.cmd = 8;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");} }/*作者:楊宣函數原型:void groupcheck(int sockfd)函數說明:形參為int 型的套接字函數功能:向服務器發送查詢群聊聊天記錄請求 */ void groupcheck(int sockfd) {User U;printf("請輸入你想查詢記錄的群名:\n");scanf("%s", U.petname);U.cmd = 6;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}/*作者:楊宣函數原型:int convert(int sockfd, char ptr[32])函數說明:形參為套接字,該客戶端登錄賬號昵稱,返回值int函數功能:發送用戶想要傳輸文件信息給服務端 */ int convert(int sockfd, char ptr[32]) {User U;FILE *fp;Judge J;int i = 0;printf("請選擇傳輸文件的對象\n");scanf("%s", U.petname);printf("清輸入傳輸的文件名\n");scanf("%s", U.buf);fp = fopen(U.buf, "r");if(fp == NULL){printf("文件解析失敗\n");return FAILURE;}else{strcpy(U.age, ptr);U.cmd = 23;ret = send(sockfd, &U, sizeof(U), 0); //先將文件名和發送者發給客戶端if(ret == -1){perror("send");}while(1){memset(U.buf, 0, sizeof(U.buf)); //每次使用之前都要清空ret = fread(U.buf, 1,sizeof(U.buf) - 1, fp); //不斷的從文件中獲取一個buf大小, ret為讀到的字節數 if(ret == -1){perror("fread");break;}if(ret == 0) //如果ret為0,說明讀到結尾了,發送bye給服務器,說明文件傳輸完畢{strcpy(U.age, "bye");ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}break;}else {U.cmd = ret;strcpy(U.age, ptr);ret = send(sockfd, &U, sizeof(U), 0); //每次都將讀到的發送給服務器if(ret == -1){perror("send");}}}fclose(fp); //文件描述符打開后,使用完一定得關上} return SUCCESS; }/*作者:楊宣函數原型:void checkfile(int sockfd)函數說明:形參為int型的套接字函數功能:查看已接收到的文件 */ void checkfile(int sockfd) {User U;U.cmd = 24;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");} }char passwd[MAX_PASSWD_LEN];/*作者:楊宣函數原型:char *MyGetch()函數說明:自定義函數返回值char *型,不帶參數函數功能:實現密碼的不回顯 */ char *MyGetch() {int len = 0;char ch;struct termios oldt, newt;while(1){if(len < MAX_PASSWD_LEN){tcgetattr(STDIN_FILENO, &oldt);newt = oldt;newt.c_lflag &= ~(ECHO | ICANON);tcsetattr(STDIN_FILENO, TCSANOW, &newt);ch = getchar();printf("*");tcsetattr(STDIN_FILENO, TCSANOW, &oldt);}else{printf("\n");break;}passwd[len] = ch;len = len + 1;}return passwd; }

?客戶端main函數

/**************************************************************> File Name: Client.c> Author: yangxuan> Mail: 2503327051@qq.com > Created Time: 2018年08月23日 星期四 17時38分22秒**************************************************************/#include <stdio.h> #include "Client.h" #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <pthread.h>//全局變量 int sockfd, ret; User RecvInfo; //定義一個用戶信息結構體變量,每一次讀線程都將讀到的信息存放到此結構體中 pthread_t tid_send; //發送線程號,設成全局變量以備線程等待時使用 pthread_t tid_recv; //接收線程號 pthread_mutex_t mutex; //定義一把鎖, 線程間操作共享內存時需要用到鎖 pthread_cond_t con; //當鎖住的共享變量發生改變時,需要用pthread_cont_t這種條件變量來精準的通知某個或幾個線程,讓他們執行相應的操作 char ptr[32] = {0}; //記下客戶端登陸賬戶昵稱,以備發起私聊,群聊, 找回密碼傳參用 int amd = 0; //amd 用在控制重復登錄操作(已有帳號在線置為1),一個客戶端只能登一個帳號并且只有登錄后才能進行相關操作 int emd = 0; //emd 用來判斷是否在找回密碼(找回密碼只為1,滿足條件將發送線程掛起) int dmd = 0; //用在注冊時讓發送線程等待,因為還要判斷用戶想不想設置密保 int bmd = 1; //bmd 用來判斷是否發起私聊(bmd = 0未發起私聊, 發起私聊將bmd 置為1) int lmd = 0; //用來判斷是否收到私聊請求(收到為1) int j = 0; //計數用戶累計獲得點贊數 int L = 1; //用來計數群聊人數 int umd = 0; //判斷是否被群主設置為管理員(umd = 1為管理員) char gg[32] = {0}; //記下邀請群聊用戶名 char s[5] = {0}; int cmd; //判斷是否收到群聊邀請(cmd = 10即為收到邀請信息,若不同意則喚醒發送線程,若同意等通信完再喚醒) pthread_t tid1, tid2; //群聊時創建兩個線程專門用來發送接收 pthread_t tid3, tid4; int fmd = 0; //用來判斷是否被禁言(禁言為1 , 解禁為0) int gmd = 1; //用來判斷是否主動發起群聊(發起為1, 結束為 0) Judge G; //定義用于判斷的結構體變量 int rmd = 0; FILE *fp; int F;//sleep函數 寫在while(1)循環里, 主動告訴操作系統,這個線程暫時處理完畢(在sleep這暫停,并不是這個代碼全走完了)將線程轉入阻塞狀態,直到經過阻塞時間才會轉入就緒狀態/*作者:楊宣函數原型:void delay()函數功能:自定義一個延遲函數,用于延長結果顯示時間 */ void delay() {int x = 30000, y;while(x > 0){y = 10000;while(y > 0){y--;}x--;} }/*作者:楊宣函數原型:void *pthread(void *arg)函數說明:線程函數,形參為void *,返回值也為void *函數功能:完成群主的信息發送,是在主發送線程的case 5群聊中起的線程*/ void *groupsend(void *arg) {int old; //設置線程取消特性,若邀請的好友全部退出,則群聊自動解散,此線程也應被取消pthread_setcanceltype(0, &old);int mm, m;User U;printf("1,發送小表情 2,自定義發送 3, 群主特權\n"); while(1){scanf("%d", &mm); if(mm ==3) //行使群主權力{printf("1, 設置管理員 2, 踢人 3, 禁言, 4,解禁\n");scanf("%d", &m);if(m == 1){User U;printf("請輸入你要設置管理員的用戶\n");scanf("%s", U.petname);U.cmd = 22;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}else if(m == 2){User U;printf("請輸入你要提出群聊的用戶!\n");scanf("%s", U.petname);U.cmd = 21;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}else if(m == 3){User U;printf("請輸入你要禁言的用戶\n");scanf("%s", U.petname);U.cmd = 20;strcpy(U.age, "FAILURE");ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}else{User U;printf("請輸入你要解禁的用戶\n");scanf("%s", U.petname);U.cmd = 20;strcpy(U.age, "SUCCESS");ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");} }} else if(mm == 1) //特殊符號代表小表情{printf("a: 微笑 b: 哭笑不得 c: 犯困 d: 鼓掌 e 解散群聊\n");scanf("%s", U.age);U.cmd = 19;strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");} if(strcmp(U.age, "e") == 0){printf("你已解散群聊\n");L = 0;pthread_cond_signal(&con);pthread_exit((void *)100);}} else //用戶自定義發送,輸入bye可解散群聊{scanf("%s", U.age);U.cmd = 19;strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");if(strcmp(U.age, "bye") == 0){printf("你已解散群聊\n");gmd = 0;L = 0;pthread_cond_signal(&con);pthread_exit((void *)100);}}}L = 1; // 群聊解散后需重新將人數為1return NULL; }/*作者:楊宣函數原型:void *pthread(void *arg)函數說明:線程函數,void *形參,返回值:void *的指針函數功能:完成進入群聊用戶的信息發送,是在接收線程的case 5群聊中起的線程*/ void *receivegroup(void *arg) {int old;pthread_setcanceltype(0, &old); //退出群聊或群主解散群聊后,都要取消該線程int m, mm;User U;printf("1,發送小表情 2,自定義發送 3, 管理員特權\n");while(1){if(fmd == 1) //禁言后將fmd為1,若不清空在線程等待之前會多發送一次{scanf("%d", &m);printf("你已被禁言,無法發送消息!\n");memset(&m, 0, sizeof(m));//break;}if(fmd != 1) {scanf("%d", &m);if(m == 3 && umd == 1) //umd = 1說明被群主設置為管理員 {printf("2, 踢人 3, 禁言, 4,解禁\n");scanf("%d", &mm);if(mm == 2){User U;printf("請輸入你要踢出群聊的用戶!\n");scanf("%s", U.petname);U.cmd = 21;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}else if(mm == 3){User U;printf("請輸入你要禁言的用戶\n");scanf("%s", U.petname);U.cmd = 20;strcpy(U.age, "FAILURE");ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}else{User U;printf("請輸入你要解禁的用戶\n");scanf("%s", U.petname);U.cmd = 20;strcpy(U.age, "SUCCESS");ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}}}else if(m == 3 && umd != 1){printf("你當前還不是管理員\n");}else if(m == 1){printf("a: 微笑 b: 哭笑不得 c: 犯困 d: 鼓掌 e: 退出群聊\n");scanf("%s", U.age);U.cmd = 18;strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}if(strcmp(U.age, "e") == 0){//fmd = 1printf("你已退出群聊!\n");delay();// umd = 0;cmd = 0;pthread_cond_signal(&con);pthread_exit((void *)100);return NULL;}}else if(m == 2){User U; memset(&U, 0, sizeof(U));scanf("%s", U.age);U.cmd = 18;strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}if(strcmp(U.age, "bye") == 0){printf("你已退出群聊!\n");delay();cmd = 0;pthread_cond_signal(&con); //退出群聊后需喚醒主發送線程,退出本線程pthread_exit((void *)100);} }} }return NULL; }void *privateSend(void *arg) {int old;pthread_setcanceltype(0, &old);int a = *(int *)arg;if(a == 1){ cc: printf(" %s: %s\n", G.buf, G.petname);memset(&G, 0, sizeof(G));printf("1,回復 2,忽略\n");scanf("%d", &a);if(a == 1){printf("%s: ", ptr);}while(1){rmd = 1;if(a == 1){User U;scanf("%s", U.buf);strcpy(U.petname, ptr);U.cmd = 13;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}if(strcmp(U.buf, "bye") == 0){printf("你已關閉私聊\n");break;}}else{pthread_cond_signal(&con);pthread_exit((void *)100);break;}}cmd = 0;pthread_cond_signal(&con);pthread_exit((void *)100);}else{cmd = 0;pthread_cond_signal(&con);pthread_exit((void *)100);}return NULL; }/*作者:楊宣函數說明:客戶端發送線程, 函數原型:void *pthread(void *arg),形參:為套接字文件描述符 返回值為void型的指針函數功能:功能不斷發送想要實現的功能所需的參數 case 1: 注冊 (需等待,確認用戶是否要設置密保) case 2: 登錄 (需等待,防止用戶密碼輸錯,重設密碼)case 3: 顯示當前在線好友 case 4:私聊 case 5:群聊(需起一個線程專門用于發送群主信息) case 6: 查看私聊記錄case 7: 查看聊天記錄 case 8:查看群聊記錄case 9:充值會員 case 10:點贊好友case 11:退出登錄 */void *pthreadsend(void *arg) {int old; //設置線程取消屬性,用戶收到ctrl + c信號,需要被取消pthread_setcanceltype(0, &old);while(1){ aa: menu(); memset(&RecvInfo, 0, sizeof(RecvInfo)); //每一次都要將結構體清空再讀scanf("%d", &RecvInfo.cmd);if(cmd == 12) //用戶收到群聊邀請,需等待若拒絕或群聊結束再喚醒主發送線程{ret = pthread_create(&tid3, NULL, privateSend, &RecvInfo.cmd);if(ret == -1){perror("privateRecv");}pthread_cond_wait(&con, &mutex);goto aa;}if(cmd == 10){ret = pthread_create(&tid2, NULL, receivegroup, &RecvInfo.cmd); //同意后起個線程用于發送信息if(ret == -1){perror("recvive");}pthread_cond_wait(&con, &mutex);}switch(RecvInfo.cmd){case 1://pthread_mutex_lock(&mutex); //若添加鎖,注冊一次后就不能再次注冊Register(sockfd);if(dmd == 0){pthread_cond_wait(&con, &mutex); //線程等待,當滿足一定條件時,線程暫停}sleep(1); //告訴操作系統,暫時執行完畢,// pthread_mutex_unlock(&mutex);break;case 2://pthread_mutex_lock(&mutex);if(amd == 1){printf("你當前已有帳號在線,請退出帳號重新登錄!\n");//sleep(2);delay();}else{ret = Login(sockfd);pthread_cond_wait(&con, &mutex);}break;case 3:if(amd != 1){printf("您當前還未登錄,請登錄后再查看在線好友!\n");delay();}else{showfriend(sockfd, ptr);}sleep(1);break;case 4:if(amd != 1){printf("您當前還未登錄,請登錄后再私聊好友!\n");delay();}else{ret = chatprivate(sockfd, ptr);if(bmd == 1){pthread_cond_wait(&con, &mutex);}}sleep(1);break;case 5:if(amd != 1){printf("您當前還未登錄,請登錄后再發起群聊!\n");delay();}else{groupchat(sockfd, L, ptr);sleep(2);pthread_create(&tid1, NULL, groupsend, NULL);if(gmd == 1){pthread_cond_wait(&con, &mutex);delay();}}break;case 6:if(amd != 1){printf("您當前還未登錄,請登錄后再查看與好友聊天記錄!\n");delay();}else{groupcheck(sockfd);pthread_cond_wait(&con, &mutex);}sleep(1);break;case 7: if(amd != 1){printf("您當前還未登錄,請登錄后再查看與好友聊天記錄!\n");delay();}else{checkrecord(sockfd, ptr);pthread_cond_wait(&con, &mutex);}sleep(1);break;case 8:if(amd != 1){printf("您當前還未登錄!\n");delay();}else{cancel(sockfd, ptr);}sleep(1);break;case 9:if(amd != 1){printf("您當前還未登錄,請登錄后再給帳號進行充值!\n");delay();}else{deposit(sockfd, ptr);}sleep(1);break;case 10:if(amd != 1){printf("您當前還未登錄,請登錄后再點贊好友!\n");delay();}else{praise(sockfd);}sleep(1);break;case 11:if(amd != 1){printf("您當前還未登錄!\n");delay();}else{ret = exitlogin(sockfd, ptr);sleep(1);if(ret == SUCCESS){amd = 0; //若退出登錄則返回SUCCESS,將amd為 0,以便下個帳號登錄并跳出循環,若沒有退出成功則跳到開頭break;}else{goto aa;}}break;case 12:ret = convert(sockfd, ptr);if(ret == SUCCESS){printf("發送成功!\n");}else{printf("發送失敗!\n");}break;case 13:checkfile(sockfd);break;} if(emd == 1 | lmd == 1) //若用戶接收私聊,正在找回密碼,需讓發送線程等待{pthread_cond_wait(&con, &mutex);sleep(2);}}return NULL; }/* 作者:楊宣函數說明:客戶端接收線程, 形參:為套接字文件描述符函數功能:不斷接收想要服務端發過來的信息 case 1: 顯示注冊結果 (1,若用戶名存在,則需重新注冊 2,兩次密碼輸入確保防止用戶手癌 3, 注冊成功后填寫密保)case 2: 顯示登錄結果 (1,用戶名輸錯,提示用戶不存在 2,密碼輸錯,提示密碼錯誤并可找回密碼或者重新輸入密碼 3,用戶已在線提示 4 用戶成功登錄) case 3: 顯示當前在線好友 (顯示某某好友在線,并統計共計多少好友在線)case 4:私聊 (私聊請求發給服務器端,服務器端驗證好友是否愿意與你私聊,若同意則可繼續聊天)case 5: 群聊(用戶主動發起群聊并成為群主,1,特殊符號代表特定的表情 2,自定義任意輸入 3,群主特權) case 6: case 7: 查看聊天記錄 (按對話形式打印)case 8:注銷用戶case 9:充值會員 (享有送花,點煙火,送愛心等特權) case 10:接收用戶群聊請求(1,同意,并另起線程發送聊天信息,在case 10中不斷打印接收的群聊信息2,不同意,喚醒主發送線程)case 11:退出登錄 (并返回主菜單) case 12:接收私聊請求,(1, 拒絕聊天 2, 接受請求并聊天, 輸入 bye 可結束聊天)case 13:接收好友點贊信息 (累計點贊數)case 14; 接受密保設置結果(失敗或成功)case 15:接收密保驗證結果 (1,驗證成功,則可設置新的密碼, 2,驗證失敗需重新輸入答案再次驗證)case 16:接收密碼找回結果(失敗或成功)*/void *pthreadrecv(void *arg) {int i = 0;char buf[32] = {0};Judge J;int old; //記下線程前一狀態,影響不大pthread_setcanceltype(0, &old); //設置線程取消特性,當客戶端接收到ctrl + c 信號,需先取消該線程, 參1:隨便取一個值 參2:取地址while(1){//pthread_mutex_lock(&mutex);memset(&J, 0, sizeof(J)); //每次使用前對結構體進行清空ret = recv(sockfd, &J, sizeof(J), 0); //將客戶端接收到的信息存入結構體中strcpy(buf, J.buf);cmd = J.cmd; //主要當接收到群聊邀請時將主發送線程掛起 即當cmd = 10if(strcmp(J.buf, "BYE") == 0) //服務端ctrl + c異常退出后會發送 BYE給客戶端 ,客戶端收到后需關閉文件描述符并取消線程{close(sockfd);pthread_cancel(tid_send); //參數為要取消的線程號break;}if(ret == -1){perror("recv");}switch(J.cmd) //根據結構體中標志位判斷顯示哪個結果{case 1:pthread_mutex_lock(&mutex);if(strcmp(J.buf, "FAILURE") == 0){printf("用戶名已存在, 請重新注冊!\n");dmd = 1;pthread_mutex_unlock(&mutex);pthread_cond_signal(&con);delay();}else{int c;printf("恭喜您注冊成功,可設置密保提高帳號安全性!\n");printf("1, 繼續設置密保 2, 去登錄\n");scanf("%d", &c);if(c == 1){User SendInfo;memset(&SendInfo, 0, sizeof(SendInfo));SendInfo.cmd = 15;printf("請設置密保問題,方便日后找回密碼!\n");printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.age);printf("爸爸的爺爺叫什么?\n");scanf("%s", SendInfo.sex);printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.key);ret = send(sockfd, &SendInfo, sizeof(SendInfo), 0);if(ret == -1){perror("send3");}dmd = 1;pthread_mutex_unlock(&mutex);pthread_cond_signal(&con);}if (c == 2){dmd = 1;pthread_mutex_unlock(&mutex);pthread_cond_signal(&con);}}dmd = 0; //操作完后一定要重新將 判斷變量置為0 break;case 2://pthread_mutex_lock(&mutex);if(strcmp(J.buf, "SUCCESS") == 0){printf("登錄成功, 您已在線!\n");delay(); //延長顯示結果pthread_cond_signal(&con);amd = 1; //用來判斷是否已有賬號登錄, 若登錄賬號則將amd置為1strcpy(ptr, J.petname); //將該客戶端登錄的用戶名記下}if(strcmp(J.buf, "FAILURE") == 0){char a[32] = {0};printf("密碼不正確, 請重新登錄!\n");printf("若忘記密碼,可憑密保找回密碼!\n");printf("是否找回密碼, y or n?\n");scanf("%s", a);if(strcmp(a, "y") == 0){emd = 1;User SendInfo;memset(&SendInfo, 0, sizeof(SendInfo));SendInfo.cmd = 16;strcpy(SendInfo.petname, J.petname);printf("請回答以下問題!\n");printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.age);printf("爸爸的爺爺叫什么?\n");scanf("%s", SendInfo.sex);printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.key);ret = send(sockfd, &SendInfo, sizeof(SendInfo), 0);if(ret == -1){perror("send3");}}else{pthread_cond_signal(&con);break;}}if(strcmp(J.buf, "FALSE") == 0){printf("用戶不存在, 可嘗試退出重登!\n");delay();pthread_cond_signal(&con);}if(strcmp(J.buf, "TRUE") == 0){printf("用戶已在線!\n");delay();pthread_cond_signal(&con);}//pthread_mutex_unlock(&mutex);break;case 3:while(1) //服務器用一個循環發送,客戶端也用一個循環接受{if(strcmp(J.buf, "SUCCESS") == 0) //信息接收完畢,會接收到SUCCESS,直接跳出循環{break;}/*else if(strcmp(J.buf, "FAILURE") == 0){printf("當前無好友在線!\n");delay();break;}*/else{printf("你的好友 %s 在線上!\n", J.buf);i++;}ret = recv(sockfd, &J, sizeof(J), 0); //不斷的接收好友在線信息if(ret == -1){perror("recv");}}printf("當前在線好友數為 %d\n", i);delay();i = 0; //每次顯示完須將計數 i置為0, 不然下次再查看時會累加break;case 4:if(strcmp(J.buf, "bye") == 0) {bmd = 0;printf("好友關閉了私聊!\n");pthread_cond_signal(&con);}else{if(strcmp(J.buf, "FALSE") == 0){printf("該用戶不存在!\n");delay();bmd = 0;pthread_cond_signal(&con);//sleep(2);}else if(strcmp(J.buf, "FAILURE") == 0){printf("該好友暫時不在線!\n");delay();bmd = 0;pthread_cond_signal(&con);}else if(strcmp(J.buf, "SUCCESS") == 0){printf("發送成功!\n");delay();system("clear");}else{int a = 0;User U;//system("clear");printf("%s 回復了你 \n", J.petname);printf("1,點擊查看, 2, 忽略\n");scanf("%d", &a);if(a == 1){printf(" %s: %s\n", J.buf, J.petname);printf("1, 回復 2,忽略\n");scanf("%d", &a);while(1){if(a == 1){printf("%s: ", ptr);scanf("%s", U.buf);strcpy(U.petname, ptr);U.cmd = 12;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}if(strcmp(U.buf, "bye") == 0){printf("你已關閉私聊\n");bmd = 0;pthread_cond_signal(&con);break;}memset(&J, 0, sizeof(J));ret = recv(sockfd, &J, sizeof(J), 0);if(ret == -1){perror("recv");}printf(" %s :%s\n", J.buf, J.petname);if(strcmp(J.buf, "bye") == 0){printf("對方關閉私聊\n");bmd = 0;pthread_cond_signal(&con);break;}}else{bmd = 0;pthread_cond_signal(&con);break;}}}else{bmd = 0;pthread_cond_signal(&con);break;}}/*if(strcmp(J.buf, "對方已接受你的邀請") == 0){User U;printf("快發送消息與好友聊天吧!\n");*//*scanf("%s", U.buf);printf(" :%s\n ", ptr);U.cmd = 12;ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("chatsend");}if(strcmp(U.buf, "bye") == 0){printf("你已關閉私聊\n");umd = 0;pthread_cond_signal(&con);}*//* else if(strcmp(J.buf, "對方拒絕你的聊天邀請") == 0){bmd = 0;pthread_cond_signal(&con);}else{printf("%s :%s\n", J.petname, J.buf);User U;scanf("%s", U.buf);printf("%s :", ptr);printf("%s\n", U.buf);U.cmd = 12;strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){ perror("chatsend");}if(strcmp(U.buf, "bye") == 0){ bmd = 0;pthread_cond_signal(&con);}}*/}bmd = 1;break;case 5:if(strcmp(J.buf, "FALSE") == 0){printf("%s 該好友暫時不在線\n", J.petname);delay();}else if(strcmp(J.buf, "FAILURE") == 0){printf("%s 拒絕了你的群聊邀請!\n", J.petname);delay();}else if(strcmp(J.buf, "SUCCESS") == 0){int mm;User U;system("clear");//pthread_create(&tid1, NULL, groupsend, NULL);printf("%s 進入群聊!\n", J.petname);L++;printf("當前群聊人數%d\n", L);/*if(L == 2){pthread_cond_signal(&con);}*/}else{if(strcmp(J.buf, "a") == 0){printf("%s 發送了一個 微笑 !\n", J.petname); }else if(strcmp(J.buf, "b") == 0){printf("%s 發送了一個 哭笑不得 !\n", J.petname);}else if(strcmp(J.buf, "c") == 0){printf("%s 發送了一個 犯困!\n", J.petname);}else if(strcmp(J.buf, "d") == 0){printf("%s 發送了一個 鼓掌 !\n", J.petname);}else if(strcmp(J.buf, "e") == 0 || strcmp(J.buf, "bye") == 0){printf("%s 退出了群聊!\n", J.petname);L--;printf("當前群聊人數%d\n", L);if(L <= 1){gmd = 0;pthread_cancel(tid1);pthread_cond_signal(&con);}}else{printf("%s : %s\n", J.petname, J.buf);}}break;case 6:while(strcmp(J.buf, "SUCCESS") != 0){printf("Jcmd%d\n", J.cmd);printf("%s : ", J.petname);printf("%s", J.buf);printf("%s\n", J.t2);memset(&J, 0, sizeof(J));ret = recv(sockfd, &J, sizeof(J), 0);if(ret == -1){perror("recv");}}delay();pthread_cond_signal(&con);break;case 7:while(strcmp(J.buf, "SUCCESS") != 0){printf("%s : ", J.petname);printf("%s ", J.buf);printf("%s\n", J.t2);memset(&J, 0, sizeof(J));ret = recv(sockfd, &J, sizeof(J), 0);if(ret == -1){perror("recv");}}delay();pthread_cond_signal(&con);break;case 8:if(strcmp(J.buf, "SUCCESS") == 0){printf("注銷成功!\n");amd = 0;}else{printf("注銷失敗\n");}break;case 9:if(strcmp(J.buf, "SUCCESS") == 0){printf("恭喜你充值成功\n");}else{printf("充值失敗\n");}break;case 10:system("clear");printf("%s 邀請你進行群聊\n", J.buf);printf("是否同意? y or n\n");scanf("%s", s);User U;strcpy(U.sex, s);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("send");}if(strcmp(s, "y") == 0){//umd = 1;User U;strcpy(gg, J.buf); //記下群聊邀請人的昵稱system("clear");printf("你已進入群聊,可以和成員進行聊天拉!\n");L++;printf("當前群聊人數 %d\n", L);}else{printf("你已拒絕群聊邀請!\n");delay();pthread_cond_signal(&con); //拒絕后喚醒主發送線程}break;case 11:if(strcmp(buf, "SUCCESS") == 0){printf("你已下線!\n");bmd--;amd = 0;//sleep(2);delay();}else{printf("下線失敗, 請稍后再試!\n");//sleep(2);delay();}break;case 12:if(rmd == 0){system("clear");printf("你收到一條新信息, 1, 點擊查看 2,忽略\n");G = J;}if(rmd == 1){if(strcmp(J.buf, "bye") == 0){pthread_cancel(tid3);cmd = 0;pthread_cond_signal(&con);sleep(2);}else{printf(" %s :%s\n", J.buf, J.petname);printf("%s: \n", ptr);}}break;case 13:printf("%s\n", J.buf);j++;printf("您的累計點贊數為 %d\n", j);break;case 14:if(strcmp(J.buf, "SUCCESS") == 0){printf("密保設置成功!\n");}else{printf("設置失敗!\n");}break;case 15:if(strcmp(J.buf, "FALSE") == 0){User U;U.cmd = 17;printf("請設置新的六位密碼!\n");//scanf("%s", U.key);getchar();strcpy(U.key, MyGetch());strcpy(U.petname, ptr);ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendfind");}}else{pthread_mutex_lock(&mutex);printf("問題回答有誤!請重新回答\n");User SendInfo;memset(&SendInfo, 0, sizeof(SendInfo));SendInfo.cmd = 16;/* printf("請輸入用戶名!\n");scanf("%s", SendInfo.petname);strcpy(find, SendInfo.petname);*/strcpy(SendInfo.petname, ptr);printf("請回答以下問題!\n");printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.age);printf("爸爸的爺爺叫什么?\n");scanf("%s", SendInfo.sex);printf("爺爺的爸爸叫什么?\n");scanf("%s", SendInfo.key);ret = send(sockfd, &SendInfo, sizeof(SendInfo), 0);if(ret == -1){perror("send3");}pthread_mutex_unlock(&mutex);}break;case 16:if(strcmp(J.buf, "SUCCESS") == 0){printf("密碼找回成功!\n");delay();emd = 0;pthread_cond_signal(&con);}else{printf("找回失敗!\n");emd = 0;pthread_cond_signal(&con);delay();}break;case 17:if(strcmp(J.buf, "a") == 0){printf("%s 發送了一個 微笑 !\n", J.petname);}else if(strcmp(J.buf, "b") == 0){printf("%s 發送了一個 哭笑不得 !\n", J.petname);}else if(strcmp(J.buf, "c") == 0){printf("%s 發送了一個 犯困!\n", J.petname);}else if(strcmp(J.buf, "d") == 0){printf("%s 發送了一個 鼓掌 !\n", J.petname);}else if((strcmp(J.buf, "e") == 0 && strcmp(J.petname, gg) == 0) || (strcmp(J.buf, "bye") == 0 && strcmp(J.petname, gg) == 0)){//fmd = 1;printf("群主解散群聊!\n");delay();//umd = 0;cmd = 0;pthread_cancel(tid2);pthread_cond_signal(&con);}else if(strcmp(J.buf, "SUCCESS") == 0){printf("%s 進入群聊\n", J.petname);L++;printf("當前群聊人數 %d\n", L);}else if((strcmp(J.buf, "e") == 0 && strcmp(J.petname, gg) != 0) || (strcmp(J.buf, "bye") == 0 && strcmp(J.petname, gg) != 0)){printf("%s 退出了群聊\n", J.petname);}else if(strcmp(J.buf, "FAILURE") == 0){printf("你已被管理員禁言\n");fmd = 1;delay();// pthread_cond_signal(&con);}else if(strcmp(J.buf, "TRUE") == 0){//cmd = 10;printf("你已被管理員解禁!\n");delay();fmd = 0;//pthread_cond_signal(&con);}else if(strcmp(J.buf, "FALSE") == 0){printf("你已被踢出群聊\n");pthread_cancel(tid2);cmd = 0;L--;pthread_cond_signal(&con);}else if(strcmp(J.buf, "TRUE") == 0){printf("你已被設置為管理員\n");umd = 1;}else{printf("%s : %s\n", J.petname, J.buf);}break;case 18:fp = fopen("file.c", "w+");if(fp == NULL){printf("文件打開失敗\n");}printf("%s 向你發送文件 %s\n", J.petname, J.buf);while(1){ret = recv(sockfd, &J, sizeof(J), 0);if(ret == -1){perror("recv");}if(strcmp(J.buf, "SUCCESS") == 0){printf("接收成功\n");break;}ret = fwrite(J.buf, 1, J.cmd, fp);if(ret == -1){perror("fwrite");}memset(J.buf, 0, sizeof(J.buf));}fclose(fp); //打開后一定要關閉break;case 19:while(1){if(strcmp(J.buf, "SUCCESS") == 0){if(F == 0){printf("暫無已接收文件\n");}break;}printf("接收來自%s 的 %s 文件\n", J.petname, J.buf);F++;ret = recv(sockfd, &J, sizeof(J), 0);if(ret == -1){perror("recv");}}break;}//pthread_mutex_unlock(&mutex);}return NULL; }/*作者:楊宣函數說明:void stopClient(int num),形參為int型,返回值為void 函數功能:關閉客戶端,當捕捉到ctrl+c信號時執行此函數,向服務端發送BYE, 告知服務端可關閉該客戶端的文件描述符并在客戶端也關閉sockfd ,并取消線程*/ void stopClient(int num) {User U;strcpy(U.petname, "BYE");if(amd == 1){U.cmd = 1;strcpy(U.buf, ptr);}ret = send(sockfd, &U, sizeof(U), 0);if(ret == -1){perror("sendstop");}close(sockfd);pthread_cancel(tid_recv);pthread_cancel(tid_send); }/*作者:楊宣函數說明:main()函數,完成sockfd 創建初始化*/ int main() {char buf[128] = {0};int length = sizeof(server_addr);pthread_mutex_init(&mutex, NULL); //初始化鎖和條件變量pthread_cond_init(&con, NULL);signal(SIGINT, stopClient); //捕捉信號ctrl+c,執行stopClient函數sockfd = socket(PF_INET, SOCK_STREAM, 0); //創建一個sockfd,采用ipv4 協議,基于流的發送機制if(sockfd == -1){perror("sockfd");exit(1);}//初始化服務端結構體變量memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = PF_INET;server_addr.sin_port = htons(PORT); //要想雙方通信,需用htons(相同端口號)server_addr.sin_addr.s_addr = inet_addr("192.168.1.113"); //參數為服務器的虛擬機IP地址//向服務端發起連接ret = connect(sockfd, (struct sockaddr *)&server_addr, (socklen_t)length);if(ret == -1){perror("connect");}//創建兩個線程,一個用來發送,一個接收ret = pthread_create(&tid_send, NULL, pthreadsend, &sockfd); if (ret != 0){perror("pthread_createsend");exit(1);}ret = pthread_create(&tid_recv, NULL, pthreadrecv, &sockfd);if (ret != 0){perror("pthread_createrecv");exit(1);}//線程等待,若不加來不及等main()函數分配到的運行時間使用完,線程就會立即死掉,不會出任何結果void *status;pthread_join(tid_send, &status);pthread_join(tid_recv, &status);return 0; }

?

?

?

?

?

總結

以上是生活随笔為你收集整理的即时通讯系统————基于TCP协议的C/S架构(Client)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产黄色片网站 | 天堂av网址| 日韩精品中文字幕在线观看 | 久久午夜精品视频 | 日韩欧美极品 | 午夜久久美女 | 久久午夜精品 | .精品久久久麻豆国产精品 亚洲va欧美 | 久久久免费在线观看 | 国产精品2019 | 韩国一区二区三区视频 | 在线视频黄 | 超碰在线观看97 | 欧美亚洲一区二区在线 | 国产成人精品福利 | 精品视频123区在线观看 | 中文字幕免费国产精品 | 国产精品久久伊人 | 中文字幕视频播放 | 成人性生交视频 | 毛片.com | avove黑丝| 午夜黄网| 色婷婷丁香 | 日日操天天射 | av网站手机在线观看 | 国内精品久久久 | 国产一线二线三线性视频 | 中文字幕av最新更新 | 亚洲精选在线观看 | 奇米四色影狠狠爱7777 | 亚洲国产精品人久久电影 | 国产精品手机播放 | 91完整版观看 | 最新日韩视频在线观看 | 国产精品理论片在线播放 | 国产视频一| 黄色一级在线免费观看 | 国产精品国产亚洲精品看不卡 | 玖操| 丁香六月婷婷开心婷婷网 | 免费麻豆| 国产视频一区在线免费观看 | 高清美女视频 | 中文在线亚洲 | 欧美日韩一区二区在线观看 | 日韩最新在线 | 久久电影国产免费久久电影 | 丁香六月久久综合狠狠色 | 国产免费视频在线 | 日韩一区二区三免费高清在线观看 | 成年人黄色免费看 | 亚洲精品乱码久久久久久蜜桃不爽 | 99精品视频在线观看 | 国产aaa大片| 久久手机视频 | 国产黄色片在线免费观看 | 中文字幕久久精品亚洲乱码 | 五月综合在线观看 | 色综合久久66 | 五月综合婷 | 国产小视频在线观看 | 福利视频一二区 | 91精品国产成人观看 | 日韩在线第一区 | 国产婷婷精品av在线 | 亚洲女欲精品久久久久久久18 | 91大神电影 | 国产一区二区三区在线 | 久久这里只有精品久久 | 欧美韩日精品 | 国产麻豆精品免费视频 | 国产精品国产三级国产不产一地 | 啪啪凸凸 | 久久亚洲日本 | 久久精品免费电影 | 天天夜夜狠狠操 | 六月激情丁香 | 国内精品久久久久久久 | 乱男乱女www7788 | 久草免费在线视频观看 | 久久精品视频免费播放 | 国产日韩欧美在线播放 | 91激情视频在线 | 久久一区二区三区四区 | 特级西西444www高清大视频 | 久久伊人精品一区二区三区 | 又色又爽又黄高潮的免费视频 | 在线观看资源 | 日本精品一区二区三区在线播放视频 | av久久在线 | 在线观看中文字幕亚洲 | 一级欧美黄 | 国产一区二区在线影院 | 91在线观看视频 | 99在线观看免费视频精品观看 | 摸bbb搡bbb搡bbbb | 永久免费视频国产 | 伊人欧美 | 国产精品久久久久三级 | 色综合亚洲精品激情狠狠 | 夜添久久精品亚洲国产精品 | 亚洲精品9 | 在线直播av | 最近字幕在线观看第一季 | 美女久久99| 久久国内精品视频 | 天天干天天摸 | 久久久久久久综合色一本 | avav片 | 91精品国产乱码在线观看 | 欧美一区二区日韩一区二区 | 久草精品视频在线看网站免费 | 日韩欧美大片免费观看 | 99re8这里有精品热视频免费 | 久久久久高清 | avcom在线 | 黄色一级大片在线免费看国产一 | 免费在线成人av电影 | 国产成人综合精品 | 国产一线二线三线在线观看 | 四虎天堂| 国产精品久久久久久麻豆一区 | mm1313亚洲精品国产 | 久久久久亚洲精品男人的天堂 | 欧美一级在线看 | 日韩午夜电影网 | 九九热免费视频在线观看 | 久久av中文字幕片 | 国产精品女同一区二区三区久久夜 | 九九激情视频 | 在线观看黄色大片 | 国产va饥渴难耐女保洁员在线观看 | 亚洲精品在线观看av | 亚洲人在线 | 五月天久久狠狠 | 日韩免费一区二区在线观看 | 国产理伦在线 | 九九久久久久久久久激情 | 久久久高清一区二区三区 | 欧美午夜精品久久久久久浪潮 | 亚洲影院色 | 九月婷婷综合网 | 日韩有码在线播放 | 免费av电影网站 | 亚洲精品综合一区二区 | 久草视频在线看 | 日韩av在线影视 | www.国产精品| 亚洲精品国产精品国 | 中文字幕在线观看不卡 | 欧美另类交人妖 | 日韩在线观看免费 | 久久久精品综合 | www.久久久com | 91av片| 九九热精品在线 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | avav片| 久久久在线观看 | 国产精品黄色在线观看 | 91人人揉日日捏人人看 | 中文字幕在线免费观看视频 | 中文字幕一区二区三区四区在线视频 | 99免费国产| 在线观看 国产 | 91在线国内视频 | 天躁狠狠躁 | 综合五月婷婷 | 国产亚洲精品综合一区91 | 2021国产精品视频 | 天天天在线综合网 | 又污又黄的网站 | 午夜av一区| www视频免费在线观看 | 国产精品激情在线观看 | 久久成人麻豆午夜电影 | 日本中文字幕一二区观 | 日韩免费久久 | 国内一级片在线观看 | 视频一区在线播放 | 在线视频观看国产 | 久久精品综合 | 毛片无卡免费无播放器 | 国产黄色免费在线观看 | 午夜影院一级片 | 欧美极品xxxx | 91丨九色丨国产在线观看 | 日本高清dvd | 黄色大片免费播放 | 最新国产中文字幕 | 不卡的av在线 | 一级性视频 | 久久综合色综合88 | 精品国产亚洲一区二区麻豆 | 免费一级片在线观看 | 91片网 | 天天天干天天射天天天操 | 亚洲一二三区精品 | 六月丁香婷 | 99精品视频在线播放观看 | 黄色网www | 午夜在线免费视频 | 夜夜操天天 | 在线视频久 | 国产手机视频精品 | 天天透天天插 | 亚洲日韩中文字幕在线播放 | 91高清免费观看 | 一级黄色大片在线观看 | 日韩成人免费在线电影 | 九九精品毛片 | 国内精品久久久久久久久久清纯 | 亚洲天堂精品视频 | 丁香婷婷激情网 | 日韩免费三区 | 麻豆 91 在线 | 成人av中文字幕在线观看 | 欧美a级在线免费观看 | 友田真希av| 久久人人97超碰精品888 | 色婷婷久久 | 国产精品美女久久 | 五月天堂色 | 91视频一8mav| 欧美精品久久久久久久久久丰满 | 日日夜夜精品免费观看 | 国产精品综合久久久久久 | 国产一级免费观看 | 中文字幕资源网 | 国产伦理剧 | 二区三区在线视频 | 日韩黄色大片在线观看 | 久久久精品福利视频 | 欧美日韩中字 | 欧美另类色图 | 日韩三级在线观看 | 国产精品一区二区av麻豆 | 91豆花在线观看 | 精品国产伦一区二区三区观看说明 | 日韩av影视在线 | 91久久一区二区 | 亚洲一区二区三区四区在线视频 | 亚洲欧美成人在线 | 色多多污污 | 亚洲综合欧美日韩狠狠色 | 成人a级免费视频 | 国产区免费| 91av福利视频 | 国产精品久久三 | 国产精品永久 | 色综合夜色一区 | 天天爽天天射 | 日韩在线电影一区 | 精品伊人久久久 | 欧亚日韩精品一区二区在线 | 国产成人免费观看 | 天天看天天干天天操 | 国产亚洲精品日韩在线tv黄 | 九九热精品视频在线观看 | 992tv在线成人免费观看 | 欧美美女一级片 | 成人精品一区二区三区电影免费 | 中文字幕在线视频一区 | 精品国产色 | 888av| 日韩国产高清在线 | 亚洲激情在线视频 | 深夜成人av | 亚洲理论片在线观看 | 色噜噜日韩精品一区二区三区视频 | 中文字幕视频免费观看 | 青春草国产视频 | 2022国产精品视频 | 精品免费国产一区二区三区四区 | 在线国产91 | 久久久久久久国产精品视频 | 在线激情网 | 天天操天| 在线观看黄色国产 | 在线超碰av| 黄色小视频在线观看免费 | 国产无套精品久久久久久 | 99爱视频在线观看 | 久久免费一 | 特级毛片爽www免费版 | 国产精品一区二区av麻豆 | 黄色www | 日韩在线欧美在线 | 国产又粗又猛又色 | 激情黄色一级片 | 国产资源免费在线观看 | 91中文字幕在线观看 | 精品国产乱码久久久久久1区二区 | 中字幕视频在线永久在线观看免费 | 成人小视频在线观看免费 | 国产精久久久久久久 | 亚洲九九精品 | 久久人人射 | 国产精品美女久久久久久久久久久 | 免费av的网站 | 青草视频在线看 | 视色网站| 成人四虎| 99久久影视 | 久久久久国产精品www | 91av蜜桃 | av片在线观看免费 | 99久久久国产精品美女 | 亚洲电影自拍 | 99热超碰 | 欧美精品在线观看一区 | 国产高清免费av | 国产精品无av码在线观看 | 国产日韩精品在线观看 | 韩国av一区二区三区 | 九色激情网 | 免费在线国产精品 | 婷婷丁香色综合狠狠色 | 狠狠操天天操 | 久久官网| 91夜夜夜 | 亚洲精品视频免费在线观看 | 开心激情五月网 | 国产一区二区不卡视频 | 国产成人精品一区二区在线 | 国产中文在线视频 | 黄色片视频免费 | 天天干,夜夜爽 | 婷婷电影网| 嫩草91影院| 成人av免费在线观看 | 亚洲三级网 | 色婷婷a| 国产黄色美女 | 国产原厂视频在线观看 | 免费在线观看午夜视频 | 久草在线视频在线 | 欧美人交a欧美精品 | 91免费网站在线观看 | 成人免费视频在线观看 | 色www免费视频 | 久久这里只有精品9 | 国产在线观看中文字幕 | 国产在线污 | 狠狠干狠狠色 | 国产福利中文字幕 | 97视频人人澡人人爽 | 天天干天天做 | 日韩成人免费观看 | www日韩在线| 国产999在线 | 国产精品自拍av | 7777精品伊人久久久大香线蕉 | 久久 地址 | 亚洲片在线 | 久久久久久久久久亚洲精品 | 国产精品不卡在线播放 | 久久久久 | 国产 日韩 在线 亚洲 字幕 中文 | 99热这里只有精品8 久久综合毛片 | 久久久黄色免费网站 | 亚洲精品欧美专区 | 免费福利在线播放 | 人人插人人插 | 天堂网一区二区 | 亚洲视频久久久 | 在线国产视频观看 | 这里有精品在线视频 | 高清av免费看 | 中国一区二区视频 | 日本久热 | 97视频在线观看成人 | 亚洲精品www.| 欧美在线一 | 欧美人人 | 不卡的av | 二区三区毛片 | 色婷婷亚洲婷婷 | 色综合婷婷 | 国产一区二区三区视频在线 | 色五丁香 | 顶级bbw搡bbbb搡bbbb | 久久99亚洲网美利坚合众国 | 婷婷丁香激情五月 | 麻豆国产露脸在线观看 | 国产精品一区二区三区电影 | 国产中文在线字幕 | 亚洲jizzjizz日本少妇 | 性色va| 欧日韩在线视频 | 97国产精品亚洲精品 | 日韩av电影免费在线观看 | 在线观看一级片 | 久久福利在线 | 狠狠干干| av久久在线 | 色婷婷综合久久久久 | 伊人天堂久久 | 爱av在线网 | 人人舔人人干 | 97人人超 | www.com.黄| 日本成人中文字幕在线观看 | 91精品久久久久久粉嫩 | 91视频91蝌蚪| 国产一二三四在线视频 | 麻豆视频观看 | 天天碰天天操 | 色婷婷激情四射 | 天天色成人 | av日韩在线网站 | 久久av不卡| 免费在线观看成人小视频 | 亚洲色图色| 欧美精品免费在线 | 国产精品女主播一区二区三区 | 精品一区二区三区香蕉蜜桃 | 精品国产黄色片 | 免费精品人在线二线三线 | 久久人人艹 | 最新超碰| 中文字幕电影高清在线观看 | 精品免费久久久久 | 国产色婷婷| 国产成人99久久亚洲综合精品 | 亚洲欧美国产精品久久久久 | 中文视频在线看 | 久久97久久97精品免视看 | 国产精品va | 99精品在线免费观看 | 啪啪激情网 | 日本电影黄色 | 免费看一级黄色大全 | 欧美一级电影免费观看 | av网站有哪些 | 韩国av一区二区三区在线观看 | 免费成人在线网站 | 中文字幕美女免费在线 | 欧美另类高清 videos | 亚洲欧美在线综合 | 欧美视频日韩视频 | 四虎影视8848dvd | www.五月天激情 | 欧美夫妻性生活电影 | 久久免费av | 日免费视频 | 免费91在线 | 国内视频 | 亚洲作爱 | 亚洲国产av精品毛片鲁大师 | 奇米网8888| av+在线播放在线播放 | 亚洲精品视频免费观看 | 人成午夜视频 | 成人精品国产 | 激情网婷婷 | 999免费视频| 成人免费观看电影 | 人人人爽| 懂色av一区二区三区蜜臀 | 麻豆影视网 | 91亚洲精品乱码久久久久久蜜桃 | www黄色软件 | 欧美人交a欧美精品 | 欧美成人a在线 | 国产成人精品一区在线 | 日本中文一级片 | 国产99久久99热这里精品5 | 88av网站 | 久久少妇免费视频 | 国产精品va在线播放 | 91九色网址 | 久久天天操 | 亚洲国产高清在线 | 骄小bbw搡bbbb揉bbbb | 一本一本久久aa综合精品 | 国产一级特黄电影 | 国产护士hd高朝护士1 | 精品一区二区在线免费观看 | 国产一区二区电影在线观看 | 天天操天天射天天添 | 亚洲91中文字幕无线码三区 | 91精品在线麻豆 | 成人精品电影 | 中文字幕在线视频免费播放 | 人人狠狠| 99re国产视频 | 久久久久久国产精品免费 | 99久久精品国产欧美主题曲 | 成年人视频免费在线 | 日日夜夜狠狠干 | 黄色av一区二区 | 亚洲久草网 | 99久视频 | 国产精品久久9 | 国产字幕在线观看 | 日韩一区精品 | 国产精品第52页 | 中文字幕在线有码 | 亚洲视频在线观看 | 国产91电影在线观看 | 色中文字幕在线观看 | 亚洲欧美日韩一级 | 国产色视频网站 | 国产在线最新 | 免费视频xnxx com | 天天曰天天 | 韩国在线视频一区 | 欧美黄在线 | 在线成人免费电影 | 欧美日韩国产成人 | 五月开心激情网 | 欧美性受极品xxxx喷水 | 毛片一级免费一级 | 伊人日日干 | 日韩欧美视频一区二区三区 | 18女毛片| 狠狠狠综合 | 樱空桃av | www五月婷婷 | 中文一二区 | 欧美日韩免费一区二区三区 | 黄免费网站| 成人黄色在线观看视频 | 亚洲日本一区二区在线 | 最新国产精品拍自在线播放 | 久久99久久精品 | 白丝av在线 | 插久久| 欧美专区日韩专区 | 亚洲精品动漫成人3d无尽在线 | 五月婷婷丁香网 | 国产成人久久久77777 | 美女久久99 | 精品亚洲网| 青青河边草免费直播 | 91麻豆免费视频 | 天天干夜夜爽 | 亚洲黄色av网址 | 欧美乱码精品一区 | 亚州欧美视频 | 国产成人精品久久亚洲高清不卡 | 精产嫩模国品一二三区 | 久草视频免费观 | 国产欧美日韩一区 | 天天色天天搞 | 成人丝袜 | 久久99精品国产91久久来源 | 日韩精品中文字幕有码 | 在线导航av| www.狠狠插.com | 一级电影免费在线观看 | 国产资源在线视频 | 91黄站| 欧美一区在线观看视频 | 亚州日韩中文字幕 | av在线电影播放 | 亚洲aⅴ在线观看 | 97视频在线观看视频免费视频 | 97香蕉久久国产在线观看 | 懂色av一区二区三区蜜臀 | 亚洲精品视频在线播放 | 一级黄色片在线观看 | 欧美日韩国产色综合一二三四 | 97超碰人人澡 | 婷婷精品进入 | 日韩在线视频国产 | 九九精品无码 | 国产96在线视频 | 欧美一区二区在线免费看 | 中文字幕一二三区 | 国产一级片视频 | 特级西西444www大胆高清无视频 | 97成人精品区在线播放 | 日韩欧美一区二区三区黑寡妇 | 有码视频在线观看 | 超碰午夜| 在线中文日韩 | 国产乱码精品一区二区三区介绍 | www欧美xxxx| 午夜性色 | 超碰在线免费97 | 在线观看免费视频 | 国产又粗又猛又爽又黄的视频先 | 国外调教视频网站 | 亚洲 欧洲 国产 日本 综合 | 久久久久激情 | 天天操福利视频 | 日本中文字幕电影在线免费观看 | 一级免费黄色 | 午夜精品视频免费在线观看 | 成人一区二区三区在线 | 亚洲精品视频一二三 | 久久国产区 | 91精品国产99久久久久 | 91桃色在线免费观看 | 精品久久久久免费极品大片 | 免费91麻豆精品国产自产在线观看 | 中文字幕精 | 亚洲电影久久 | 欧美在线视频日韩 | 久久影院午夜论 | 一区二区精品视频 | 一区二区视频播放 | 色偷偷人人澡久久超碰69 | 亚洲另类在线视频 | av资源网在线播放 | 一区二区三区免费在线播放 | 在线视频观看成人 | 免费看黄在线 | 黄色av一区| 97网在线观看 | 日本中文字幕视频 | 成人在线播放免费观看 | 亚洲国产精品一区二区久久hs | 97超碰成人在线 | 精品国产伦一区二区三区免费 | 欧美极品久久 | 欧美一区二区免费在线观看 | 国产精品入口66mio女同 | 一区二区三区精品久久久 | 婷婷六月综合网 | 成人免费看电影 | 免费看黄电影 | 亚洲理论视频 | 在线观看视频黄 | 超碰av在线 | 久久久激情视频 | 国产成人黄色网址 | av成人动漫在线观看 | 69国产在线观看 | 婷婷色网站 | 97精品电影院 | 精品国产亚洲日本 | 91av在线精品 | 97精品国产97久久久久久免费 | 成人黄色中文字幕 | 亚洲精品国产精品国自产观看浪潮 | 五月开心六月婷婷 | 伊人天天狠天天添日日拍 | 久久久精品国产免费观看一区二区 | 91av观看| 日韩丝袜视频 | av在线收看 | 日韩亚洲在线 | 亚洲综合视频在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 99精品视频在线观看视频 | 亚洲成a人片77777潘金莲 | 99色在线播放 | 日日夜夜精品免费 | 九九视频一区 | 成人在线免费看 | 久久精品—区二区三区 | 久久精品99国产精品日本 | 97超碰在线免费观看 | 一区在线观看 | 五月婷婷丁香在线观看 | 欧美一级裸体视频 | 精品国模一区二区 | 激情中文在线 | 国产精品久久久久aaaa | 成人黄色电影免费观看 | 国产麻豆果冻传媒在线观看 | 99久久精品国产网站 | 日韩动漫免费观看高清完整版在线观看 | 波多野结衣视频一区二区 | 亚洲天天干 | 国产高清视频在线播放一区 | 亚洲在线日韩 | 中文字幕在线第一页 | 婷婷久久综合网 | 蜜臀久久99精品久久久久久网站 | 久草免费在线视频观看 | 国产成人一二三 | 成人av片在线观看 | 丁香婷婷激情网 | 91福利社在线观看 | 深夜免费福利视频 | 激情欧美在线观看 | 三上悠亚一区二区在线观看 | h视频在线看 | 久久精品美女视频 | 日韩精品欧美专区 | 亚洲欧洲一区二区在线观看 | 日韩av影视| 日本午夜免费福利视频 | 国产精品18久久久久久不卡孕妇 | 久久久久久福利 | 亚洲精品在线观看的 | 日韩av线观看 | 久久97久久 | 在线影院中文字幕 | 国产麻豆视频 | 少妇啪啪av入口 | 日韩专区在线播放 | 欧美乱淫视频 | 狠狠狠色狠狠色综合 | 色99之美女主播在线视频 | 久久久国产精品亚洲一区 | 免费看特级毛片 | 日本免费久久高清视频 | 亚洲综合在线观看视频 | 亚洲精品高清一区二区三区四区 | 九九热视频在线播放 | 成人av手机在线 | 精品国产午夜 | 91亚·色| 日韩中文字幕视频在线观看 | 西西444www| 免费视频黄色 | 精品1区2区3区 | 国产麻豆电影在线观看 | 激情五月伊人 | 免费av在线网站 | 亚洲精品国产成人av在线 | 狠狠干天天射 | 婷婷丁香在线视频 | 欧美精品久久天天躁 | 免费看的黄网站 | 天天草天天操 | 99视频在线精品国自产拍免费观看 | 天天综合操 | 国精产品满18岁在线 | 国产三级在线播放 | 91视频高清免费 | 色亚洲网| 蜜臀久久99精品久久久无需会员 | 日韩亚洲在线视频 | 日韩电影在线观看一区 | 欧美精品小视频 | 色综合www | 成人av中文字幕在线观看 | 日韩精品一卡 | 在线免费高清视频 | 亚洲精品视频网站在线观看 | 精品综合久久 | 外国av网 | 亚洲a网 | 成人久久久久久久久久 | 国产精品第一页在线观看 | 国产日本高清 | 美女网站一区 | 黄色av免费| 成人免费观看视频网站 | 亚洲精品乱码久久 | 成人黄在线观看 | 日本一区二区三区视频在线播放 | 粉嫩一区二区三区粉嫩91 | 久久99精品视频 | 久久av不卡 | 亚洲专区中文字幕 | 亚洲国产福利视频 | 精品欧美一区二区精品久久 | 中文字幕av免费在线观看 | 久久综合综合久久综合 | 天天干天天干天天射 | 激情久久五月天 | 国产网红在线观看 | 久久久久久久影视 | 婷婷在线播放 | 91成人精品视频 | 日韩在线电影一区二区 | 欧美精品小视频 | 久久tv视频 | 91最新视频在线观看 | 天天干天天操av | 欧美日本不卡视频 | 天天爱天天草 | 99精品视频一区二区 | 久久精品美女视频 | 亚洲资源在线观看 | 99c视频在线 | 91香蕉嫩草 | 久久影视精品 | 国产99亚洲 | 丁香影院在线 | 丁香视频 | 欧美性受极品xxxx喷水 | 久久久久久网站 | 蜜桃视频精品 | 精品久久久影院 | 久久调教视频 | 黄色资源在线观看 | 国产日产亚洲精华av | av电影免费看 | 国产精品一区二区三区免费视频 | 黄色特级一级片 | 中文在线免费视频 | 午夜电影久久久 | 久久免费资源 | 91大神一区二区三区 | 91成人在线看 | 88av色| 中文字幕在线观看日本 | 久久av网址 | 国产精品九九视频 | 国产在线最新 | 婷婷丁香激情五月 | 国产成人精品国内自产拍免费看 | 欧美激情亚洲综合 | 日韩在线看片 | 精品国产一区二区三区久久久蜜月 | 国产精品一区二区在线播放 | 特级a毛片 | 久久呀| 国产亚洲精品久久久久久移动网络 | 99精品国产兔费观看久久99 | av大全在线看 | 日韩激情视频 | 又长又大又黑又粗欧美 | 麻豆传媒一区二区 | 国产成人精品久久二区二区 | 九九视频免费在线观看 | 久久久久久久久久久久国产精品 | 在线观看免费视频你懂的 | 免费av在线网站 | 丁香婷婷激情 | 亚洲九九九在线观看 | 国产一级不卡毛片 | 亚洲精品456在线播放第一页 | 色综合五月天 | 天堂网中文在线 | 成人av免费在线播放 | 久久深夜福利免费观看 | 日韩精品免费在线 | 成人午夜电影网 | 欧美男男tv网站 | 五月天国产精品 | 天天射天天搞 | 国内久久视频 | 日本一区二区不卡高清 | 国产黄色av网站 | 久草久草视频 | 天天操狠狠操 | 久久久久日本精品一区二区三区 | 日本激情动作片免费看 | 黄色在线观看免费 | 亚洲闷骚少妇在线观看网站 | 经典三级一区 | 99久久精品免费一区 | 天天操狠狠操网站 | 天天操天天射天天舔 | 欧美激情精品久久久久久免费 | 欧美成人精品欧美一级乱黄 | 天天爱天天 | 日韩av片免费在线观看 | 97偷拍在线视频 | 园产精品久久久久久久7电影 | 欧美国产亚洲精品久久久8v | 久久精品播放 | 婷婷色综| 午夜精品久久久久久久99 | 精品国产一区二区三区在线 | 久久久精品国产一区二区 | 日韩免费视频观看 | 亚洲欧美在线视频免费 | 天天干天天色2020 | 国产流白浆高潮在线观看 | 又黄又爽的免费高潮视频 | 玖玖玖在线 | 成人免费视频播放 | av电影在线观看完整版一区二区 | 香蕉视频一级 | 综合色影院 | 精品国产aⅴ麻豆 | 超碰在线人 | 99热手机在线观看 | 亚洲欧美日韩精品一区二区 | www.久艹 | 日韩欧美综合视频 | 国内精品视频在线 | 日日爱999 | 丁香激情五月 | 欧美高清视频不卡网 | 免费看污的网站 | 日韩欧美在线观看 | 日韩成人免费在线观看 | 在线观看国产www | 国产精品午夜久久久久久99热 | 91看片在线 | 激情综合国产 | 亚洲禁18久人片 | 日本韩国欧美在线观看 | 97视频在线免费 | 国产精品一区二区三区视频免费 | 香蕉精品视频在线观看 | 日韩一级黄色大片 | 97超碰中文字幕 | 一区二区精 | 欧美日韩在线播放一区 | 日本黄色免费在线 | 久久久高清免费视频 | 日韩久久久 | 日本黄色一级电影 | av高清免费在线 | 精品美女在线视频 | 久久久久久久久久福利 | 日韩两性视频 | 国产精品自产拍在线观看中文 | 少妇bbw撒尿| 在线观看av大片 | 天天操天天谢 | 91福利影院在线观看 | 亚洲精品videossex少妇 | 色综合亚洲精品激情狠狠 | 国内精品久久久久久久久久 | 99热网站| 亚洲精品久久久久中文字幕m男 | 91av视频免费在线观看 | 91精品秘密在线观看 | 国产亚洲资源 | 在线看国产 | 免费精品久久久 | 婷婷深爱激情 | 在线观看岛国 | 91精品啪在线观看国产线免费 | 免费国产一区二区 | 91成人在线观看喷潮 | 九九热在线播放 | 日韩在线观看一区二区三区 | 国产成人777777 | 久久久高清免费视频 | 欧美日韩综合在线 | 深夜免费福利在线 | 91视频在线免费观看 | 久久精品国产美女 | 7777xxxx | 六月丁香在线观看 | 日日躁夜夜躁aaaaxxxx | 亚洲1区 在线 | 超碰在线中文字幕 | 丁香国产视频 | 在线观看日韩 | 视频一区亚洲 | 亚洲综合激情网 | 欧美激情第一区 | 免费在线黄网 | 久久观看最新视频 | 波多野结衣最新 | 欧美 日韩精品 | 亚洲国产精品资源 | 国产99精品在线观看 | 亚洲日本在线视频观看 | 国产成人在线播放 | 天天干天天草 | 国产粉嫩在线观看 | 69av在线视频| 久久综合99 | 中文字幕av在线不卡 | 日韩 在线a | 亚洲永久精品在线观看 | www.av免费观看 | 中文在线8新资源库 | 久久精品国产成人精品 | 97在线观看免费高清 | 久久久久久久久影视 | 久久www免费人成看片高清 | 日韩av成人在线 | 成人av一区二区三区 | 91观看视频 | 五月婷婷在线视频观看 | 91日韩精品视频 | 精品一区91| 亚洲精品久久久久中文字幕二区 | 亚洲国产精品成人女人久久 | 免费av大全 | 天天天天天天操 | 啪啪午夜免费 | 国产一区二区在线免费播放 | 狠狠黄 | 人人爽人人爱 | 色综合激情网 | 天天综合网 天天综合色 | 欧美巨大荫蒂茸毛毛人妖 | 日本护士三级少妇三级999 | 99久免费精品视频在线观看 | 97视频在线免费 | 久久久久久久网 | 91亚瑟视频 | 亚洲精品国产综合久久 | 91精品综合在线观看 | 91桃色国产在线播放 | 精品在线观看免费 | 欧美一级片在线 | 97超级碰碰碰视频在线观看 | 91少妇精拍在线播放 | 亚洲91网站 | 91超级碰碰 | 蜜臀av夜夜澡人人爽人人 | 香蕉看片 | 美女久久久久久久久久久 | 啪啪激情网 | 在线观看国产福利片 | 欧美成人a在线 | 日操干| 亚洲第一区精品 |