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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

muduo源码client/server通信流程

發(fā)布時間:2025/6/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 muduo源码client/server通信流程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? ? 今天來學(xué)習(xí)一下muduo源碼中client和server間的大致通信流程,以echo服務(wù)為例,先看一下echo對面的main函數(shù)代碼。

#include "examples/simple/echo/echo.h"#include "muduo/base/Logging.h" #include "muduo/net/EventLoop.h"#include <unistd.h>// using namespace muduo; // using namespace muduo::net;int main() {LOG_INFO << "pid = " << getpid(); //getpid()獲取進程號muduo::net::EventLoop loop;muduo::net::InetAddress listenAddr(2007); //綁定IP地址和端口EchoServer server(&loop, listenAddr);server.start();loop.loop(); }

? ? ? ?先實例化一個loop,這會調(diào)用loop的構(gòu)造函數(shù),看一下loop的構(gòu)造函數(shù)。

EventLoop::EventLoop(): looping_(false), //判斷是否在loopquit_(false), //判斷是否退出的標(biāo)志eventHandling_(false), //處理handevent的標(biāo)志callingPendingFunctors_(false), //判斷當(dāng)前是不是在執(zhí)行方法隊列iteration_(0),threadId_(CurrentThread::tid()), //當(dāng)前線程IDpoller_(Poller::newDefaultPoller(this)), //創(chuàng)建一個 poll 或 epoll 對象timerQueue_(new TimerQueue(this)), //創(chuàng)建一個計時器wakeupFd_(createEventfd()), //發(fā)送喚醒loop消息的描述符,隨便寫點消息即可喚醒wakeupChannel_(new Channel(this, wakeupFd_)), //wakeupChannel_用來自己給自己通知的一個通道,該通道會納入到poller來管理currentActiveChannel_(NULL) //當(dāng)前活躍的channel鏈表指針 {LOG_DEBUG << "EventLoop created " << this << " in thread " << threadId_;if (t_loopInThisThread) //判斷是否是本線程的loop,是一個loop類型的指針{LOG_FATAL << "Another EventLoop " << t_loopInThisThread<< " exists in this thread " << threadId_; //用LOG_FATAL終止abort它}else{t_loopInThisThread = this; //this賦給線程局部數(shù)據(jù)指針}//設(shè)定wakeupChannel的回調(diào)函數(shù),即EventLoop自己的的handleRead函數(shù)wakeupChannel_->setReadCallback(std::bind(&EventLoop::handleRead, this)); //channel->handleEventWithGuard會調(diào)用到handleRead// we are always reading the wakeupfdwakeupChannel_->enableReading(); //注冊wakeupFd_到poller }

? ? ?loop就相當(dāng)于一個reactor,loop構(gòu)造函數(shù)new了epoll,創(chuàng)建了喚醒描述符,并注冊到epoll。接著對EchoServer進行了構(gòu)造,調(diào)用了start函數(shù)。

EchoServer::EchoServer(muduo::net::EventLoop* loop,const muduo::net::InetAddress& listenAddr): server_(loop, listenAddr, "EchoServer") {server_.setConnectionCallback(std::bind(&EchoServer::onConnection, this, _1)); //連接到達server_.setMessageCallback(std::bind(&EchoServer::onMessage, this, _1, _2, _3)); //消息到達 }void EchoServer::start() {server_.start(); }

? ? ??EchoServer構(gòu)造函數(shù)中設(shè)置了連接達到和消息達到的回調(diào)函數(shù),并構(gòu)建了TcpServer。再看TcpServer的構(gòu)造函數(shù)。

TcpServer::TcpServer(EventLoop* loop,const InetAddress& listenAddr,const string& nameArg,Option option): loop_(CHECK_NOTNULL(loop)),ipPort_(listenAddr.toIpPort()),name_(nameArg),acceptor_(new Acceptor(loop, listenAddr, option == kReusePort)),threadPool_(new EventLoopThreadPool(loop, name_)),connectionCallback_(defaultConnectionCallback),messageCallback_(defaultMessageCallback),nextConnId_(1) { /* * 設(shè)置回調(diào)函數(shù),當(dāng)有客戶端請求時,Acceptor接收客戶端請求,然后調(diào)用這里設(shè)置的回調(diào)函數(shù)* 回調(diào)函數(shù)用于創(chuàng)建TcpConnection連接*/acceptor_->setNewConnectionCallback(std::bind(&TcpServer::newConnection, this, _1, _2)); }

? ? ??TcpServer構(gòu)造函數(shù)new了一個acceptor_,設(shè)置了當(dāng)有新連接達到時該調(diào)用的回調(diào)函數(shù)。看一下acceptor的構(gòu)造函數(shù)。

Acceptor::Acceptor(EventLoop* loop, const InetAddress& listenAddr, bool reuseport): loop_(loop),acceptSocket_(sockets::createNonblockingOrDie(listenAddr.family())),//初始化創(chuàng)建sockt fdacceptChannel_(loop, acceptSocket_.fd()),//初始化channellistenning_(false),idleFd_(::open("/dev/null", O_RDONLY | O_CLOEXEC)) {assert(idleFd_ >= 0);acceptSocket_.setReuseAddr(true);acceptSocket_.setReusePort(reuseport);acceptSocket_.bindAddress(listenAddr);acceptChannel_.setReadCallback(std::bind(&Acceptor::handleRead, this));// //有可讀事件,當(dāng)fd可讀時調(diào)用回調(diào)函數(shù)hanleRead }

? ? ?Acceptor構(gòu)造函數(shù)中設(shè)置了當(dāng)有可讀事件是該調(diào)用的構(gòu)造函數(shù),然后start()函數(shù)和loop()函數(shù)開始調(diào)用。

void TcpServer::start() {if (started_.getAndSet(1) == 0){threadPool_->start(threadInitCallback_);//啟動線程池,threadInitCallback_創(chuàng)建好所有線程后調(diào)用的回調(diào)函數(shù)assert(!acceptor_->listenning());loop_->runInLoop( //直接調(diào)用linsten函數(shù)std::bind(&Acceptor::listen, get_pointer(acceptor_)));} } void EventLoop::loop() {assert(!looping_);assertInLoopThread(); //事件循環(huán)必須在IO線程中,即創(chuàng)建該evenloop的線程looping_ = true;quit_ = false; // FIXME: what if someone calls quit() before loop() ?LOG_TRACE << "EventLoop " << this << " start looping";while (!quit_){activeChannels_.clear(); //activeChannels_是一個vector等待io復(fù)用函數(shù)返回pollReturnTime_ = poller_->poll(kPollTimeMs, &activeChannels_); //調(diào)用poll返回活動的事件,有可能是喚醒返回的++iteration_;if (Logger::logLevel() <= Logger::TRACE){printActiveChannels();}// TODO sort channel by priority 按優(yōu)先級排序//處理IO事件eventHandling_ = true;for (Channel* channel : activeChannels_) //遍歷通道來進行處理{currentActiveChannel_ = channel;currentActiveChannel_->handleEvent(pollReturnTime_); //pollReturnTime_是poll返回的時刻}currentActiveChannel_ = NULL; //處理完了賦空eventHandling_ = false;//執(zhí)行方法隊列中的方法[方法隊列functors,我們可以跨線程的往里面添加新的方法,這些方法會在處理完io事件后執(zhí)行]doPendingFunctors(); //這個設(shè)計也能夠進行計算任務(wù)} void Acceptor::listen() {loop_->assertInLoopThread(); //保證是在IO線程listenning_ = true;acceptSocket_.listen();acceptChannel_.enableReading(); 注冊可讀事件 }

? ? ? ?start函數(shù)中在loop里面調(diào)用了Acceptor的listen函數(shù)注冊可讀事件(將可讀事件加入epoll),接著loop函數(shù)在while循環(huán)里面調(diào)用poller_->poll()。接著看一下epoll的poll函數(shù)。

Timestamp EPollPoller::poll(int timeoutMs, ChannelList* activeChannels) {LOG_TRACE << "fd total count " << channels_.size();int numEvents = ::epoll_wait(epollfd_,&*events_.begin(), //events_已初始化static_cast<int>(events_.size()), //監(jiān)控套接字的數(shù)目timeoutMs);int savedErrno = errno;Timestamp now(Timestamp::now());if (numEvents > 0){LOG_TRACE << numEvents << " events happened";fillActiveChannels(numEvents, activeChannels);if (implicit_cast<size_t>(numEvents) == events_.size()) //如果返回的事件數(shù)目等于當(dāng)前事件數(shù)組大小,就分配2倍空間{events_.resize(events_.size()*2);}}else if (numEvents == 0){LOG_TRACE << "nothing happened";}else{// error happens, log uncommon onesif (savedErrno != EINTR){errno = savedErrno;LOG_SYSERR << "EPollPoller::poll()";}}return now; }

? ? ? ?代碼中有調(diào)用epoll_wait函數(shù)。

? ? ? ?當(dāng)有新連接到達時,epoll返回,currentActiveChannel_->handleEvent(上述loop.loop函數(shù)中)被調(diào)用,看一下對應(yīng)代碼。

//處理所有發(fā)生的事件,如果活著,底層調(diào)用handleEventWithGuard void Channel::handleEvent(Timestamp receiveTime) 事件到來調(diào)用handleEvent處理 {std::shared_ptr<void> guard; //守護if (tied_){guard = tie_.lock();if (guard){handleEventWithGuard(receiveTime);}}else{handleEventWithGuard(receiveTime);} }//處理所有發(fā)生的事件 //EPOLLIN :表示對應(yīng)的文件描述符可以讀; //EPOLLOUT:表示對應(yīng)的文件描述符可以寫; //EPOLLPRI:表示對應(yīng)的文件描述符有緊急的數(shù)據(jù)可讀 //EPOLLERR:表示對應(yīng)的文件描述符發(fā)生錯誤; //EPOLLHUP:表示對應(yīng)的文件描述符被掛斷; //EPOLLET:表示對應(yīng)的文件描述符有事件發(fā)生; void Channel::handleEventWithGuard(Timestamp receiveTime) { eventHandling_ = true; LOG_TRACE << reventsToString();if ((revents_ & POLLHUP) && !(revents_ & POLLIN)) //判斷返回事件類型{if (logHup_){LOG_WARN << "fd = " << fd_ << " Channel::handle_event() POLLHUP";}if (closeCallback_) closeCallback_();}if (revents_ & POLLNVAL) //不合法文件描述符{LOG_WARN << "fd = " << fd_ << " Channel::handle_event() POLLNVAL";}if (revents_ & (POLLERR | POLLNVAL)){if (errorCallback_) errorCallback_();}if (revents_ & (POLLIN | POLLPRI | POLLRDHUP)) //POLLRDHUP是對端關(guān)閉連接事件,如shutdown等{if (readCallback_) readCallback_(receiveTime);}if (revents_ & POLLOUT){if (writeCallback_) writeCallback_();}eventHandling_ = false; }

? ? ? 是可讀事件,readCallback_被調(diào)用,[acceptChannel_.setReadCallback(std::bind(&Acceptor::handleRead, this))]有設(shè)置,則Acceptor::handleRead()函數(shù)被調(diào)用。

void Acceptor::handleRead() //新連接到達由acccptor處理 {loop_->assertInLoopThread();InetAddress peerAddr;//FIXME loop until no moreint connfd = acceptSocket_.accept(&peerAddr);//這里時真正接收連接if (connfd >= 0){// string hostport = peerAddr.toIpPort();// LOG_TRACE << "Accepts of " << hostport;if (newConnectionCallback_){newConnectionCallback_(connfd, peerAddr);//將新連接信息傳送到回調(diào)函數(shù)中}else//沒有回調(diào)函數(shù)則關(guān)閉client對應(yīng)的fd{sockets::close(connfd);}}else{LOG_SYSERR << "in Acceptor::handleRead";// Read the section named "The special problem of// accept()ing when you can't" in libev's doc.// By Marc Lehmann, author of libev.if (errno == EMFILE){::close(idleFd_);idleFd_ = ::accept(acceptSocket_.fd(), NULL, NULL);::close(idleFd_);idleFd_ = ::open("/dev/null", O_RDONLY | O_CLOEXEC);}} }

? ? ?newConnectionCallback_被調(diào)用,[acceptor_->setNewConnectionCallback(std::bind(&TcpServer::newConnection, this, _1, _2));],則調(diào)用tcpServer中的newConnection函數(shù)。

void TcpServer::newConnection(int sockfd, const InetAddress& peerAddr) {loop_->assertInLoopThread();EventLoop* ioLoop = threadPool_->getNextLoop();//從事件驅(qū)動線程池中取出一個線程給TcpConnection /* 為TcpConnection生成獨一無二的名字 */char buf[64];snprintf(buf, sizeof buf, "-%s#%d", ipPort_.c_str(), nextConnId_);++nextConnId_;string connName = name_ + buf;LOG_INFO << "TcpServer::newConnection [" << name_<< "] - new connection [" << connName<< "] from " << peerAddr.toIpPort();/* * 根據(jù)sockfd獲取tcp連接在本地的<地址,端口>* getsockname(int fd, struct sockaddr*, int *size);*/InetAddress localAddr(sockets::getLocalAddr(sockfd));// FIXME poll with zero timeout to double confirm the new connection// FIXME use make_shared if necessary/* 創(chuàng)建一個新的TcpConnection代表一個Tcp連接 */TcpConnectionPtr conn(new TcpConnection(ioLoop,connName,sockfd,localAddr,peerAddr));/* 添加到所有tcp 連接的map中,鍵是tcp連接獨特的名字(服務(wù)器名+客戶端<地址,端口>) */connections_[connName] = conn;/* 為tcp連接設(shè)置回調(diào)函數(shù)(由用戶提供) */conn->setConnectionCallback(connectionCallback_);conn->setMessageCallback(messageCallback_);conn->setWriteCompleteCallback(writeCompleteCallback_);/* * 關(guān)閉回調(diào)函數(shù),由TcpServer設(shè)置,作用是將這個關(guān)閉的TcpConnection從map中刪除* 當(dāng)poll返回后,發(fā)現(xiàn)被激活的原因是EPOLLHUP,此時需要關(guān)閉tcp連接* 調(diào)用Channel的CloseCallback,進而調(diào)用TcpConnection的handleClose,進而調(diào)用removeConnection*/conn->setCloseCallback(std::bind(&TcpServer::removeConnection, this, _1)); // FIXME: unsafe/* * 連接建立后,調(diào)用TcpConnection連接建立成功的函數(shù)* 1.新建的TcpConnection所在事件循環(huán)是在事件循環(huán)線程池中的某個線程* 2.所以TcpConnection也就屬于它所在的事件驅(qū)動循環(huán)所在的那個線程* 3.調(diào)用TcpConnection的函數(shù)時也就應(yīng)該在自己所在線程調(diào)用* 4.所以需要調(diào)用runInLoop在自己的那個事件驅(qū)動循環(huán)所在線程調(diào)用這個函數(shù)* 5.當(dāng)前線程是TcpServer的主線程,不是TcpConnection的線程,如果在這個線程直接調(diào)用會阻塞監(jiān)聽客戶端請求* 6.其實這里不是因為線程不安全,即使在這個線程調(diào)用也不會出現(xiàn)線程不安全,因為TcpConnection本就是由這個線程創(chuàng)建的*/ioLoop->runInLoop(std::bind(&TcpConnection::connectEstablished, conn)); }

connectionCallback_和messageCallback_就是echo.cc中設(shè)置的,connectEstablished會調(diào)用了用戶設(shè)置的connectionCallback.

新連接到達之后就new了一個TcpConnection,看一下TcpConnection的構(gòu)造函數(shù)。

TcpConnection::TcpConnection(EventLoop* loop,const string& nameArg,int sockfd,const InetAddress& localAddr,const InetAddress& peerAddr): loop_(CHECK_NOTNULL(loop)),name_(nameArg),state_(kConnecting), //輸入輸出緩沖區(qū)reading_(true),socket_(new Socket(sockfd)), //RAII管理已連接套接字channel_(new Channel(loop, sockfd)), //使用Channel管理套接字上的讀寫localAddr_(localAddr),peerAddr_(peerAddr),highWaterMark_(64*1024*1024) {//設(shè)置事件分發(fā)器的各事件回調(diào) (將TcpConnection類的四個事件處理函數(shù)設(shè)置為事件分發(fā)器對應(yīng)的回調(diào)函數(shù))channel_->setReadCallback(std::bind(&TcpConnection::handleRead, this, _1));channel_->setWriteCallback(std::bind(&TcpConnection::handleWrite, this));channel_->setCloseCallback(std::bind(&TcpConnection::handleClose, this));channel_->setErrorCallback(std::bind(&TcpConnection::handleError, this));LOG_DEBUG << "TcpConnection::ctor[" << name_ << "] at " << this<< " fd=" << sockfd;socket_->setKeepAlive(true); }

設(shè)置了套接字可讀,可讀對應(yīng)的回調(diào)函數(shù)。當(dāng)client發(fā)送數(shù)據(jù)過來時,TcpConnection::handleRead被調(diào)用。

void TcpConnection::handleRead(Timestamp receiveTime) {loop_->assertInLoopThread();int savedErrno = 0;ssize_t n = inputBuffer_.readFd(channel_->fd(), &savedErrno);if (n > 0){//調(diào)用回調(diào)函數(shù),使用shared_from_this()得到自身的shared_ptr,延長了該對象的生命期,保證了它的生命期長過messageCallback_函數(shù),messageCallback_能安全的使用它messageCallback_(shared_from_this(), &inputBuffer_, receiveTime);}else if (n == 0){handleClose();}else{errno = savedErrno;LOG_SYSERR << "TcpConnection::handleRead";handleError();} }

? ?最終調(diào)用到了用戶設(shè)置的messageCallback_,到此流程大致分析完畢。

tcpserver: setNewConnectionCallback //新連接到達(新連接到達由acccptor處理)acceptor:setReadCallback //有可讀事件linsten:enableReading //注冊可讀事件echo:setConnectionCallback //連接到達setMessageCallback //數(shù)據(jù)到達TcpConnection:setReadCallback //可讀事件setWriteCallback //可寫事件

? ? 上面是各個類設(shè)置的對應(yīng)的回調(diào)函數(shù),當(dāng)新連接達到時,acceptor處理,然后到tcpserver,然后到TcpConnection,在后面就是TcpConnection和echo進行交互。

總結(jié)

以上是生活随笔為你收集整理的muduo源码client/server通信流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产黄色片一级 | 精品日韩在线一区 | 狠狠躁夜夜躁人人爽超碰91 | 欧美大jb| 999国内精品永久免费视频 | 在线观看亚洲视频 | 午夜久草 | 在线观看国产成人av片 | 在线高清 | 欧美亚洲另类在线视频 | 亚洲国产精久久久久久久 | 成人免费在线看片 | 国产欧美高清 | 国产一区二区在线观看免费 | 99久热在线精品 | 国内精品久久久久久久影视麻豆 | 丁香免费视频 | 黄色av网站在线观看 | 欧美日韩3p | 国产精品99久久久久久久久 | 日韩精品免费在线 | 国产99亚洲 | 99 视频 高清 | 国产91精品欧美 | 四虎伊人 | 日韩精品免费专区 | 色婷婷电影 | 亚洲成av人片在线观看无 | 国产精品一区在线播放 | 在线视频观看国产 | 国产亚洲一区 | 国产精品麻豆欧美日韩ww | 国产精品成人av电影 | 字幕网资源站中文字幕 | www.日日操.com| 99精品免费网 | 日日综合网| av高清一区二区三区 | 日韩色综合 | 天天操月月操 | 久久久久一区二区三区 | 久久夜色网 | 在线观看视频免费播放 | 五月天中文在线 | 日韩欧美极品 | 日韩影视大全 | 中文字幕日韩电影 | 亚洲精品国产精品国自 | 午夜少妇av | 又黄又爽又色无遮挡免费 | 久久国产露脸精品国产 | 成人a免费 | 国产91影院 | 日日日操 | 国产精品 中文在线 | 在线观看你懂的网址 | 国产精品 久久 | 国产精品久久久久高潮 | 麻豆视屏| 国产精品丝袜久久久久久久不卡 | 亚欧日韩av | 国产日韩中文在线 | 波多野结衣一区二区 | 免费黄色a网站 | 久久久久女教师免费一区 | 国产xxxx做受性欧美88 | 亚洲激情校园春色 | 国产精品成人一区二区三区吃奶 | 国产亚洲午夜高清国产拍精品 | 三级性生活视频 | 看片网站黄色 | 最近中文字幕在线中文高清版 | 欧美午夜a | 免费麻豆 | 欧美日韩1区 | 国产精品乱码一区二三区 | 日韩欧美视频免费观看 | 日产av在线播放 | 国产不卡在线播放 | 九色porny真实丨国产18 | 午夜av色| 亚洲精品18p | 免费在线观看午夜视频 | 久久激情视频网 | 99视频久久 | 久草在线视频新 | 久久y| 91亚洲视频在线观看 | 深爱五月激情五月 | 欧美极品久久 | 月丁香婷婷| 日日夜夜综合 | 亚洲黄色片一级 | 日韩丝袜视频 | 国产在线免费 | 亚洲理论电影 | 亚洲黄色成人网 | 国内久久精品 | 中文在线资源 | 日韩一级电影在线观看 | 亚洲精品综合一二三区在线观看 | 国产日韩视频在线播放 | 国产一区二区电影在线观看 | 色99导航| 99久久精品国产一区二区成人 | 免费色婷婷 | 视频91在线| 麻豆视频在线观看 | 色综合天天色综合 | 亚洲在线网址 | 欧美日韩一级久久久久久免费看 | 高清久久久 | 国产精品午夜在线观看 | 天天艹天天操 | 国产精品久久99综合免费观看尤物 | 亚洲更新最快 | 99在线观看视频 | 久久久久久国产精品亚洲78 | 日韩欧美高清视频在线观看 | 蜜臀av网址| 亚洲一区二区三区毛片 | 天天草天天爽 | 日韩女同av | 国产拍揄自揄精品视频麻豆 | 中文字幕在线观看视频网站 | 91人网站 | 日韩欧美99| 在线观看黄色免费视频 | 一级久久精品 | 精品中文字幕在线 | 久久午夜免费视频 | 日本黄色免费大片 | 九九亚洲视频 | 天天搞夜夜骑 | 看黄色91 | 成人黄色电影在线播放 | 手机在线永久免费观看av片 | 精品国产一区二区三区四区在线观看 | 天天干天天插伊人网 | 亚州av成人 | 欧美精品一二 | 亚洲视频免费在线 | 日韩一区在线免费观看 | 精品久久久久国产 | 免费视频久久久 | 伊人永久 | 黄色三级免费网址 | 中文字幕在线播放日韩 | 永久免费观看视频 | 狠狠躁夜夜躁人人爽超碰91 | 国产美女主播精品一区二区三区 | 日本精品久久久一区二区三区 | 97超碰资源 | 久草在线最新 | 视频一区在线播放 | 精品国产一区二区三区av性色 | www久久com| 久久艹艹 | 91免费在线视频 | 在线观看免费色 | 日韩视频图片 | 国产视频 亚洲精品 | 狠狠狠狠狠狠狠 | 精品国产乱码久久久久久1区2匹 | 国产精品一区二区在线免费观看 | 日韩色在线观看 | 国产精品亚洲片夜色在线 | 日韩综合视频在线观看 | 久久激情五月丁香伊人 | 久久综合九色综合欧美就去吻 | 欧美日bb | 九九久久免费 | 欧美日韩不卡在线视频 | 四虎国产永久在线精品 | 丁香五婷 | 国产日韩视频在线观看 | 欧美日韩国产精品一区二区亚洲 | 最新av电影网址 | 在线欧美小视频 | 麻花豆传媒一二三产区 | 日日夜夜中文字幕 | 国产高清在线观看av | 夜夜操天天操 | 欧美成人一区二区 | 麻豆你懂的 | 日本天天操 | 一区二区三区在线观看中文字幕 | 91麻豆高清视频 | 亚洲国产精品电影 | 激情视频免费在线 | 国产片网站 | 国产看片 色| 亚州精品一二三区 | 狠狠狠色丁香综合久久天下网 | 一区二区精品视频 | 国产日产精品久久久久快鸭 | 国产韩国日本高清视频 | 久久综合狠狠综合久久综合88 | 久久成人高清视频 | 色欧美88888久久久久久影院 | 成人精品久久 | 在线播放 一区 | 91精品小视频| 日本精品久久久久中文字幕5 | 久久久久看片 | 天天插天天狠 | 97超碰超碰 | 免费又黄又爽的视频 | 欧美日韩免费观看一区二区三区 | 免费观看www视频 | 中文不卡视频 | 国产免费高清视频 | 在线观看亚洲免费视频 | 色黄久久久久久 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 久久精品视频在线看 | 中文字幕韩在线第一页 | 色中色综合 | 射射射av| 亚洲国产无 | 精品国产亚洲在线 | av电影中文字幕在线观看 | 五月天狠狠操 | 国产亚洲成人网 | 久久精品国产亚洲a | 一区二区三区在线观看免费视频 | 97超碰超碰久久福利超碰 | 免费三级黄色片 | 久久99电影 | 免费久久99精品国产 | 久久免费看a级毛毛片 | 国产一级性生活 | 成人精品一区二区三区电影免费 | 九九色在线观看 | 久久免费av电影 | 久久99精品国产91久久来源 | 久久精品99国产精品 | 日日夜夜91| 午夜电影久久 | 国产精品久久一卡二卡 | 国产精品久久久久一区 | 丁香六月中文字幕 | 成人国产精品av | 狠狠成人 | 国产精品麻豆免费版 | 久久综合狠狠综合久久激情 | 色永久免费视频 | 天天干天天干天天干天天干天天干天天干 | 亚洲狠狠丁香婷婷综合久久久 | av久久久 | 久久99热这里只有精品国产 | 开心色激情网 | 午夜免费福利视频 | 国产一区二区三区在线免费观看 | 久久精品国产一区二区 | 国产精品久久久久久久婷婷 | 免费在线看v | 狠狠ri| 超碰在线人人 | 久久黄色成人 | 免费福利在线 | 视频二区在线 | 最近2019好看的中文字幕免费 | 欧美黄污视频 | 毛片网站免费在线观看 | 久久精品99| 99久久久久免费精品国产 | 国产精品日韩欧美 | 久久99国产精品视频 | 婷婷在线视频观看 | 精品久久久久免费极品大片 | 国产不卡在线看 | 国产一区在线播放 | 成年一级片 | 黄色资源网站 | 国产精品久久久久久电影 | 亚洲专区中文字幕 | 91福利视频一区 | 天天色官网 | 国产美女视频免费观看的网站 | 日韩高清黄色 | 久久av高清 | 成人国产综合 | 91完整视频| 99视频精品全部免费 在线 | 久草在线资源观看 | 久草免费在线观看视频 | 在线 欧美 日韩 | 成人免费观看网站 | 五月激情综合婷婷 | 在线亚洲人成电影网站色www | 美女网站在线 | 夜夜躁狠狠躁日日躁 | 免费网站在线观看成人 | 人人添人人澡 | 97视频在线免费 | 久久久综合 | 成人免费一级片 | 日本午夜免费福利视频 | 国产亚洲精品电影 | 日韩乱码中文字幕 | 成年人在线观看网站 | 99在线观看免费视频精品观看 | 国产精品a久久久久 | 亚洲砖区区免费 | 国产福利一区二区三区视频 | 国产美女被啪进深处喷白浆视频 | 久久综合五月天婷婷伊人 | 五月婷婷综合在线视频 | 久久人人爽人人爽人人 | 视频三区 | 精品国产自在精品国产精野外直播 | 不卡电影免费在线播放一区 | 久久国产精品99久久久久久丝袜 | 久久精品电影网 | 狠狠久久伊人 | 国产一区高清在线 | 久久黄色免费观看 | 91字幕 | 国产精品大尺度 | 精品一区欧美 | 国产一区欧美日韩 | 三级在线国产 | 91在线九色| 国产精品久久久久一区二区三区共 | 成年人黄色免费网站 | 不卡的一区二区三区 | 在线观看视频一区二区 | 黄色国产大片 | 夜夜操狠狠干 | 中文字幕在线观看1 | 麻豆国产精品一区二区三区 | a特级毛片| 日韩美视频 | 国产精品99久久久久久人免费 | 国产伦精品一区二区三区高清 | 久久tv | 免费一级特黄毛大片 | 亚洲成人免费观看 | 一区二区三区四区影院 | 国产高清黄色 | 国产成人精品久久二区二区 | 91在线亚洲 | 不卡av在线播放 | 日韩在线视频一区二区三区 | 国产精品入口66mio女同 | 日韩精品视频在线观看网址 | 99久久免费看 | 日韩久久精品一区二区 | 亚洲乱码国产乱码精品天美传媒 | 香蕉视频免费在线播放 | 日韩中文字幕国产 | 国产成年免费视频 | 国产中文字幕在线视频 | 极品久久久 | 人人添人人| 色多多在线观看 | 在线黄色毛片 | 最近中文字幕视频网 | 成人久久18免费网站图片 | 亚洲毛片在线观看. | 天天操天天玩 | 日韩视频一区二区三区在线播放免费观看 | av不卡中文字幕 | 中文字幕你懂的 | 99热只有精品在线观看 | 91福利在线观看 | 国产小视频在线免费观看视频 | 日韩在线视频免费播放 | 99r在线视频| 精品影院 | 中文字幕视频三区 | 91中文字幕| av黄色免费看| 91色视频 | 人人澡人 | 五月导航 | 久久久高清一区二区三区 | 免费看91的网站 | 久久精品站| 免费看精品久久片 | 欧美日韩精品在线播放 | 国产日韩欧美自拍 | 91香蕉视频黄色 | 久久伊99综合婷婷久久伊 | 日韩中字在线 | 国产福利免费看 | 国产呻吟在线 | 久久精品国产一区二区三 | 久久综合国产伦精品免费 | 国产网站在线免费观看 | 色综合久久99 | .国产精品成人自产拍在线观看6 | 日韩在线免费电影 | 麻豆va一区二区三区久久浪 | 精品久久久久亚洲 | 狠狠天天 | 又黄又爽又无遮挡的视频 | 亚洲综合激情小说 | 国产精品a久久 | 91成人短视频在线观看 | 婷婷丁香狠狠爱 | 日韩网站在线免费观看 | 色综合久久久 | 操天天操 | 亚洲v欧美v国产v在线观看 | 国产高清免费av | 久久在线看 | 国产麻豆精品传媒av国产下载 | 少妇精69xxtheporn | 色婷婷免费 | 国产精品女同一区二区三区久久夜 | 国产大片免费久久 | 四虎成人在线 | 精品一区二区久久久久久久网站 | 欧美一级视频免费看 | 91精品久久久久久久久久久久久 | 色橹橹欧美在线观看视频高清 | 亚洲色图 校园春色 | 中国一级特黄毛片大片久久 | 久热爱 | 日韩啪视频 | 国产免费小视频 | 久久99国产精品二区护士 | 超碰人人超 | 久久久国产一区二区三区 | 国产精品免费大片视频 | 欧美激情xxxx性bbbb | 一区二区三区在线观看免费视频 | 悠悠av资源片 | 在线观看日韩中文字幕 | 一区电影 | 福利视频一区二区 | 久久久久久激情 | 999毛片| www.99久久.com| 国产成人一区二区在线观看 | av黄色av| 日韩av电影网站在线观看 | 97视频在线观看视频免费视频 | 日韩美女av在线 | 九九免费在线观看 | av成人在线电影 | 五月婷婷丁香激情 | 欧美亚洲专区 | 91人人人 | 亚洲夜夜爽| 中文字幕人成乱码在线观看 | 欧美性色黄大片在线观看 | 日韩欧美区 | 色噜噜在线观看 | 中文字幕在线视频精品 | 日韩电影中文 | 中文字幕在线观看的网站 | 欧美激情xxxx | 成片免费观看视频大全 | 免费视频一二三区 | 国产精品va在线观看入 | 久黄色 | 岛国片在线| 久久a久久| 天天爽夜夜爽人人爽曰av | 国产中文字幕久久 | 亚洲国产免费 | 日韩av电影中文字幕 | 久久99久久99精品中文字幕 | 国产视频一区二区三区在线 | 99人久久精品视频最新地址 | 国产精品自在线 | 少妇性色午夜淫片aaaze | 亚洲国产精品日韩 | 日韩女同av| 狠狠狠色丁香综合久久天下网 | 色欧美成人精品a∨在线观看 | 看黄色91| 天堂网一区二区 | 成 人 黄 色视频免费播放 | 久久精品一 | 国产午夜精品理论片在线 | 久草久| 日韩91在线 | 99婷婷| 免费看成人av | 国产精品一区二区麻豆 | 成人在线视频免费 | 久久久久久久久黄色 | 国产一二区视频 | 国产福利一区二区三区视频 | 成年人视频在线观看免费 | 久草色在线观看 | 一区二区观看 | 综合在线色 | 国产亚洲视频中文字幕视频 | 日韩有码在线观看视频 | 免费在线色电影 | 亚洲国产剧情av | 园产精品久久久久久久7电影 | 欧洲精品码一区二区三区免费看 | 中文成人字幕 | 精品美女久久久久 | 久久久久草 | www.福利 | 91人人澡人人爽人人精品 | 天天爽天天碰狠狠添 | 精品国偷自产在线 | 久久免费一 | 97超级碰碰| 国产精品久久久久一区二区三区共 | 日日婷婷夜日日天干 | 国产资源精品在线观看 | 五月天激情在线 | 西西www444| 97免费公开视频 | 亚洲成人黄 | 午夜精品久久久久久久99 | 久青草国产在线 | 日韩欧美观看 | 婷婷色吧 | 精品一二三四五区 | 欧美另类视频 | www.激情五月.com | 成人国产精品一区 | 久久久久亚洲精品男人的天堂 | 人人干人人干人人干 | 啪啪动态视频 | 久草影视在线观看 | 极品久久久 | 国产精品中文字幕在线 | 国产免费亚洲高清 | 欧美精品在线免费 | av一区二区三区在线 | 青青河边草免费直播 | 日本午夜在线亚洲.国产 | 99精品视频免费观看 | 99免费在线播放99久久免费 | 亚洲四虎影院 | 国产视频在线免费 | 日韩精品首页 | 国产高清av免费在线观看 | 日韩在线视频观看免费 | 国产不卡网站 | 综合天堂av久久久久久久 | 国产高清日韩 | 超碰在线人 | 国产视频一 | 九九热视频在线免费观看 | 91亚洲精品乱码久久久久久蜜桃 | 在线精品国产 | 亚洲欧美成人 | 国产资源免费 | 日韩一区二区三免费高清在线观看 | 精品久久久久久久久久岛国gif | 一区二区三区四区五区六区 | 天天插天天色 | 六月色婷婷| 91精品天码美女少妇 | 一区二区三区中文字幕在线观看 | 亚洲 欧美变态 另类 综合 | 免费在线91 | 欧美一级黄色网 | 天天操天天能 | 国产福利电影网址 | www.黄色片网站 | 久草免费在线观看视频 | 黄色av高清 | 91精品国产综合久久久久久久 | 97电影网站 | 91九色蝌蚪在线 | 免费看国产视频 | 四虎免费在线观看 | 国产专区在线播放 | 97视频久久久 | 日韩中文字幕免费电影 | 国产第一页在线播放 | 在线观看黄a | 亚洲国产一区在线观看 | 婷婷综合视频 | 日韩av有码在线 | 成人91在线 | 久久99国产视频 | 成人免费在线电影 | 日韩午夜精品 | 91超级碰碰| 麻豆一区在线观看 | av大全免费在线观看 | 91免费版成人 | 黄色aa久久 | 色999在线| 国产麻豆剧果冻传媒视频播放量 | 日韩久久久 | 日韩国产精品久久 | 免费观看国产视频 | 天天综合网天天综合色 | 欧美精品在线观看免费 | 国产一区二区不卡视频 | 亚洲精品国产精品国自 | 午夜精品福利一区二区三区蜜桃 | 国产日女人 | 草在线视频| 国产69精品久久app免费版 | 中文在线免费一区三区 | 亚洲国产理论片 | 国产一级高清 | 91资源在线播放 | 天堂av最新网址 | 国产精品九九九 | 日韩欧美一区二区三区免费观看 | 亚洲国产一区av | 中文在线a天堂 | 黄色a在线| 日韩在线视频观看 | 一区二区精品在线 | 国产精品久久久久久婷婷天堂 | 91香蕉视频720p | 日韩av免费在线看 | 久久视频免费观看 | 91在线影视 | 婷婷六月天综合 | 亚洲国产成人精品在线 | 黄色毛片电影 | 欧美一二三四在线 | 国产麻豆精品在线观看 | 国产免费视频一区二区裸体 | 天天色天天操天天爽 | 久久久久久高潮国产精品视 | 国产精品18久久久久vr手机版特色 | 精品久久久久久亚洲综合网 | 99精品偷拍视频一区二区三区 | 亚洲天堂网视频在线观看 | 国产高清在线 | 亚洲精品在线资源 | www.综合网.com| 国产视 | 欧美a级在线 | 日韩av成人在线 | 香蕉视频最新网址 | 精品美女在线观看 | 成人影视片 | 欧美福利视频一区 | 国产精品亚州 | 天天干干 | 一级免费黄色 | 国产中文欧美日韩在线 | 81精品国产乱码久久久久久 | 久久无码av一区二区三区电影网 | 色婷婷免费视频 | 黄色软件视频大全免费下载 | 久久久免费精品国产一区二区 | 人人澡人人爽欧一区 | 中文字幕在线播放一区二区 | 91粉色视频 | 国产91成人 | 婷婷草| 久久免费精品一区二区三区 | 国产视频精品免费播放 | 久久久久久久久久免费 | 国产精品手机在线 | 日韩在线观看网站 | 99九九99九九九视频精品 | 国产免费激情久久 | 99色99| 久久精品国产亚洲精品 | 久久一区二| 欧美日韩视频一区二区 | 日本韩国精品一区二区在线观看 | a爱爱视频| 成年人天堂com | 91视频这里只有精品 | 在线观看免费成人av | 一区二区在线电影 | 国产日韩精品一区二区在线观看播放 | 黄污网 | 国产精品九九九 | av黄色亚洲 | 国精产品999国精产品视频 | 99在线国产| 久久99免费观看 | 国产色女人 | 久久午夜剧场 | 国产精品欧美久久久久天天影视 | 亚洲涩涩网站 | 四虎影视精品 | 欧洲激情在线 | 国产精品自在欧美一区 | 久久久久久久久久久久国产精品 | 97视频在线观看视频免费视频 | 91手机电影 | 国模视频一区二区 | 日本视频网 | 韩日三级在线 | 国产成人久久久久 | 99久久精品国产免费看不卡 | 麻豆视频在线看 | 成人精品一区二区三区中文字幕 | 久久久久一区二区三区 | 久久久综合色 | 婷婷激情5月天 | 午夜123 | 久久国产午夜精品理论片最新版本 | 成人在线播放视频 | www.黄色片网站 | 国产精品激情偷乱一区二区∴ | 色诱亚洲精品久久久久久 | 国产精品二区在线 | 国产香蕉视频在线播放 | 婷婷九九| 国产一区私人高清影院 | 久久夜夜操 | 国产欧美中文字幕 | 欧美黄色免费 | av网站免费看 | 精品色999 | 国产成人精品不卡 | 9797在线看片亚洲精品 | 视频一区二区在线观看 | 国产精品18久久久久白浆 | .国产精品成人自产拍在线观看6 | 伊人成人激情 | 看国产黄色大片 | 日日爱av| 精品免费一区二区三区 | 国产视频一区二区在线播放 | 成人午夜剧场在线观看 | 日韩精品久久久久久中文字幕8 | 日韩理论视频 | 精品国产一区二区三区日日嗨 | 亚洲视屏一区 | 国产成人三级一区二区在线观看一 | 欧美日韩精品在线播放 | 婷婷色网视频在线播放 | 国产成人性色生活片 | 久久久久久高潮国产精品视 | 美女久久久久久久 | 国产精品入口久久 | 国产精品久久久久久久久久久久久久 | 国产精品成人一区二区三区吃奶 | 精品视频99 | 久久噜噜少妇网站 | 国产a高清| 麻豆国产视频 | 天天综合网入口 | 久久国产精品一区二区三区 | 96超碰在线 | 久久精品视频网站 | 1024手机在线看 | 97视频网址 | 久久中文字幕导航 | 亚洲激情一区二区三区 | 中文字幕在线观看2018 | 成 人 黄 色 视频 免费观看 | 国产精品少妇 | 亚洲国产精品久久久久久 | 青青河边草观看完整版高清 | 久久婷婷国产色一区二区三区 | 国产又粗又硬又爽的视频 | 亚洲精品久久久久久久不卡四虎 | 超碰97在线人人 | 久久综合九色九九 | japanesexxx乱女另类 | 五月婷婷丁香六月 | 丝袜美女在线观看 | 人人藻人人澡人人爽 | 一区二区中文字幕在线观看 | 五月综合激情网 | 亚洲精品白浆高清久久久久久 | 中文免费观看 | 99视频久久| 黄色性av| 色偷偷88888欧美精品久久久 | 久久久久久高潮国产精品视 | 午夜的福利 | 久久精品网址 | 在线观看视频精品 | 免费在线观看一区二区三区 | 不卡的av电影在线观看 | 国产综合片 | 91麻豆精品国产91久久久久 | 91精品免费| 综合网色| 欧洲精品视频一区 | 91精品伦理 | 日本成人免费在线观看 | 999在线观看视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久不卡av | 最近更新好看的中文字幕 | 三上悠亚一区二区在线观看 | 在线看国产日韩 | 亚洲高清视频一区二区三区 | 免费中文字幕视频 | 狠狠狠操 | 美女视频网| 天天综合在线观看 | 97色在线视频 | 色香网| 一级精品视频在线观看宜春院 | 国产白浆在线观看 | 92中文资源在线 | 五月天激情综合 | 亚洲免费在线观看视频 | 日韩av中文字幕在线 | 婷婷性综合 | 婷婷色社区 | 2018好看的中文在线观看 | 精品国产理论片 | 国产精品国产三级国产aⅴ入口 | 欧美日韩观看 | 国产91精品高清一区二区三区 | av一区二区三区在线 | 色婷婷狠狠五月综合天色拍 | 成人在线观看资源 | 在线播放一区二区三区 | 精精国产xxxx视频在线播放 | 99热最新地址 | 久草免费新视频 | 午夜久久久久久久 | 国产成人精品在线观看 | 在线色资源 | 日韩毛片在线免费观看 | 国产三级视频在线 | 久久久久免费视频 | 久久这里有精品 | 国内丰满少妇猛烈精品播放 | 国色天香永久免费 | 激情五月综合 | 国产精品一区二区久久久久 | 91亚洲在线 | 国产精品嫩草影院9 | 成人免费在线播放视频 | 久久精品爱视频 | 一区二区激情 | 免费在线一区二区 | 亚洲一区二区91 | 麻豆精品在线视频 | 东方av在 | 日黄网站| 91最新视频在线观看 | 伊人狠狠 | 日韩在线视频播放 | 狠狠色丁香久久婷婷综合五月 | 国产一级h | 成人av中文字幕在线观看 | 黄色在线看网站 | 国产精品手机视频 | 精品国产aⅴ麻豆 | 久久国产免费看 | 九九在线播放 | 香蕉网在线观看 | 久久综合久久鬼 | 国产另类xxxxhd高清 | 日韩免费精品 | 99九九免费视频 | 日本公妇在线观看 | av福利资源| 亚洲高清在线视频 | 一区二区精品在线 | 日韩欧美视频在线观看免费 | 欧美日韩中文国产一区发布 | 久草在线免费在线观看 | 999久久国产| 91av视频网 | 免费视频你懂得 | 日韩高清精品免费观看 | 99久久er热在这里只有精品15 | 国产精品v欧美精品v日韩 | 亚洲码国产日韩欧美高潮在线播放 | 99九九热只有国产精品 | 亚洲黄色av网址 | 精品国偷自产在线 | 四虎www | 少妇按摩av | 国产亚洲精品久久久久久 | 国产中文欧美日韩在线 | 精品一区在线 | 精品福利视频在线观看 | 国产视频 亚洲视频 | 亚洲区精品| 99在线高清视频在线播放 | 亚洲精品国精品久久99热 | av在线一级| 婷婷色站| 五月天.com | 午夜久久福利视频 | 最新日本中文字幕 | 亚洲国产精品视频在线观看 | 国产精品一区二区三区电影 | 亚洲成人网av | 亚洲精选在线观看 | 91污视频在线 | 不卡国产视频 | 久久免费电影网 | 国产精品无av码在线观看 | 中文在线a在线 | 亚洲精品无 | 视频一区二区三区视频 | 丁香资源影视免费观看 | 欧美色噜噜 | 少妇高潮冒白浆 | 国产伦理久久精品久久久久_ | 免费看黄色91 | 91在线视频导航 | 97色涩 | 超碰人人草人人 | 亚洲综合色丁香婷婷六月图片 | 国产精品久久久久影院 | 在线视频 成人 | 日韩精品你懂的 | 国产婷婷一区二区 | 99在线观看免费视频精品观看 | 在线观看视频日韩 | 九九热re | 91久草视频 | 正在播放国产91 | 色999精品| 91亚洲永久精品 | 日韩免费电影一区二区三区 | 69视频在线播放 | 久久久国产成人 | 久青草国产在线 | 亚洲 欧美日韩 国产 中文 | 97综合视频| 久久久久免费 | 成人中文字幕在线观看 | 国产成人精品av在线 | 久久深爱网 | 亚洲成熟女人毛片在线 | 日本午夜免费福利视频 | 久久免费公开视频 | 婷婷丁香狠狠爱 | 激情开心色 | 国产精品久久久久久高潮 | 久久国产影视 | 玖玖玖影院 | 精品九九九 | 天天爽天天碰狠狠添 | 婷婷成人在线 | 精品欧美一区二区在线观看 | 人人干狠狠操 | 天天天射 | 中文在线资源 | 亚洲一区二区麻豆 | 天天干夜夜夜 | 国产精品mv| 亚洲另类视频在线观看 | 911免费视频 | 国产一级淫片免费看 | 一区二区精品 | 在线观看视频97 | 日韩av电影中文字幕在线观看 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 999电影免费在线观看 | 色婷婷福利 | av电影不卡在线 | 在线va网站| 91精品视频免费 | 日韩一片| 韩国av三级| 国产一区二区精品91 | 九九免费在线视频 | 国产在线观看a | 国产高清绿奴videos | 久久久精品免费观看 | 亚洲人在线7777777精品 | av天天澡天天爽天天av | 国产成人黄色在线 | 五月婷在线| 最近高清中文字幕 | 日p视频在线观看 | av在线激情 | 久久99婷婷 | 在线观看成人小视频 | 超碰在线观看97 | 黄色毛片视频免费观看中文 | 亚洲一区精品二人人爽久久 | 天天干天天操天天 | 久久久久精 | 日日日操操 | 天天摸日日摸人人看 | 激情综合六月 | 西西www444 | 欧美日韩久 | 最近2019好看的中文字幕免费 | 91精品入口 | 五月婷婷丁香综合 | 久久无码精品一区二区三区 | 国产精品丝袜久久久久久久不卡 | 国产精品久久久久久久免费大片 | 欧美特一级 | 国产精品亚洲视频 | 日韩免费av片 | 国产精品99精品久久免费 | 国产精品久久久久久久久费观看 | 国内视频在线观看 | 久久免费视频在线观看 | 免费一区在线 | 成人精品久久 | 日本最大色倩网站www | 日韩色区 |