精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解析 Qt網(wǎng)絡(luò)之TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

移動開發(fā)
本節(jié)接著上節(jié)繼續(xù)講,我們重新寫一個(gè)客戶端程序和一個(gè)服務(wù)器程序,這次我們讓客戶端進(jìn)行文件的發(fā)送,服務(wù)器進(jìn)行文件的接收。

解析 Qt網(wǎng)絡(luò)TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)是本文要介紹的內(nèi)容,接著上一篇繼續(xù)介紹。解析Qt網(wǎng)絡(luò)之TCP 上篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ) 在上一節(jié)里我們使用TCP服務(wù)器發(fā)送一個(gè)字符串,然后在TCP客戶端進(jìn)行接收。在這一節(jié)我們重新寫一個(gè)客戶端程序和一個(gè)服務(wù)器程序,這次我們讓客戶端進(jìn)行文件的發(fā)送,服務(wù)器進(jìn)行文件的接收。有了上一節(jié)的基礎(chǔ),這一節(jié)的內(nèi)容就很好理解了,注意一下幾個(gè)信號和槽的關(guān)聯(lián)即可。當(dāng)然,我們這次要更深入了解一下數(shù)據(jù)的發(fā)送和接收的處理方法。

一、客戶端

這次我們先講解客戶端,在客戶端里我們與服務(wù)器進(jìn)行連接,一旦連接成功,就會發(fā)出connected()信號,這時(shí)我們就進(jìn)行文件的發(fā)送。

在上一節(jié)我們已經(jīng)看到,發(fā)送數(shù)據(jù)時(shí)我們先發(fā)送了數(shù)據(jù)的大小信息。這一次,我們要先發(fā)送文件的總大小,然后文件名長度,然后是文件名,這三部分我們合稱為文件頭結(jié)構(gòu),最后再發(fā)送文件數(shù)據(jù)。所以在發(fā)送函數(shù)里我們就要進(jìn)行相應(yīng)的處理,當(dāng)然,在服務(wù)器的接收函數(shù)里我們也要進(jìn)行相應(yīng)的處理。對于文件大小,這次我們使用了qint64,它是64位的,可以表示一個(gè)很大的文件了。

1.同前一節(jié),我們新建工程,將工程命名為“tcpSender”。注意添加network模塊。

2.我們在widget.ui文件中將界面設(shè)計(jì)如下。

Qt網(wǎng)絡(luò)之TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)
這里“主機(jī)”后的Line Edit的objectName為hostLineEdit;“端口”后的Line Edit的objectName為portLineEdit;下面的Progress Bar的objectName為clientProgressBar,其value屬性設(shè)為0;“狀態(tài)”Label的objetName為clientStatusLabel;“打開”按鈕的objectName為openButton;“發(fā)送”按鈕的objectName為sendButton;

3.在widget.h 文件中進(jìn)行更改。

(1)添加頭文件#include <QtNetwork>

(2)添加private變量:

  1. QTcpSocket *tcpClient;  
  2.     QFile *localFile;  //要發(fā)送的文件  
  3.     qint64 totalBytes;  //數(shù)據(jù)總大小  
  4.     qint64 bytesWritten;  //已經(jīng)發(fā)送數(shù)據(jù)大小  
  5.     qint64 bytesToWrite;   //剩余數(shù)據(jù)大小  
  6.     qint64 loadSize;   //每次發(fā)送數(shù)據(jù)的大小  
  7.     QString fileName;  //保存文件路徑  
  8. QByteArray outBlock;  //數(shù)據(jù)緩沖區(qū),即存放每次要發(fā)送的數(shù)據(jù) 

(3)添加私有槽函數(shù):

  1. private slots:  
  2.     void send();  //連接服務(wù)器  
  3.     void startTransfer();  //發(fā)送文件大小等信息  
  4.     void updateClientProgress(qint64); //發(fā)送數(shù)據(jù),更新進(jìn)度條  
  5.     void displayError(QAbstractSocket::SocketError); //顯示錯(cuò)誤  
  6. void openFile();  //打開文件 

4.在widget.cpp文件中進(jìn)行更改。

添加頭文件:#include <QFileDialog>

(1)在構(gòu)造函數(shù)中添加代碼:

  1. loadSize = 4*1024;  
  2.     totalBytes = 0;  
  3.     bytesWritten = 0;  
  4.     bytesToWrite = 0;  
  5.     tcpClient = new QTcpSocket(this);  
  6.     connect(tcpClient,SIGNAL(connected()),this,SLOT(startTransfer()));  
  7.     //當(dāng)連接服務(wù)器成功時(shí),發(fā)出connected()信號,我們開始傳送文件  
  8.     connect(tcpClient,SIGNAL(bytesWritten(qint64)),this,  
  9. SLOT(updateClientProgress(qint64)));  
  10.     //當(dāng)有數(shù)據(jù)發(fā)送成功時(shí),我們更新進(jìn)度條  
  11.     connect(tcpClient,SIGNAL(error(QAbstractSocket::SocketError)),this,  
  12.             SLOT(displayError(QAbstractSocket::SocketError)));  
  13.     ui->sendButton->setEnabled(false);  
  14.     //開始使”發(fā)送“按鈕不可用 

我們主要是進(jìn)行了變量的初始化和幾個(gè)信號和槽函數(shù)的關(guān)聯(lián)。

(2)實(shí)現(xiàn)打開文件函數(shù)。

  1. void Widget::openFile()   //打開文件  
  2. {  
  3.     fileName = QFileDialog::getOpenFileName(this);  
  4.     if(!fileName.isEmpty())  
  5.     {  
  6.         ui->sendButton->setEnabled(true);  
  7.         ui->clientStatusLabel->setText(tr(“打開文件 %1 成功!”)  
  8.                                        .arg(fileName));  
  9.     }  

該函數(shù)將在下面的“打開”按鈕單擊事件槽函數(shù)中調(diào)用。

(3)實(shí)現(xiàn)連接函數(shù)。

  1. void Widget::send()   //連接到服務(wù)器,執(zhí)行發(fā)送  
  2. {  
  3.     ui->sendButton->setEnabled(false);  
  4.     bytesWritten = 0;  
  5.     //初始化已發(fā)送字節(jié)為0  
  6.     ui->clientStatusLabel->setText(tr(“連接中…”));  
  7.     tcpClient->connectToHost(ui->hostLineEdit->text(),  
  8.                             ui->portLineEdit->text().toInt());//連接  

該函數(shù)將在“發(fā)送”按鈕的單擊事件槽函數(shù)中調(diào)用。

(4)實(shí)現(xiàn)文件頭結(jié)構(gòu)的發(fā)送。

  1. void Widget::startTransfer()  //實(shí)現(xiàn)文件大小等信息的發(fā)送  
  2. {  
  3.     localFile = new QFile(fileName);  
  4.     if(!localFile->open(QFile::ReadOnly))  
  5.     {  
  6.         qDebug() << "open file error!";  
  7.         return;  
  8.     }  
  9.     totalBytes = localFile->size();  
  10.     //文件總大小  
  11.     QDataStream sendOut(&outBlock,QIODevice::WriteOnly);  
  12.     sendOut.setVersion(QDataStream::Qt_4_6);  
  13.     QString currentFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1);  
  14.     sendOut << qint64(0) << qint64(0) << currentFileName;  
  15.     //依次寫入總大小信息空間,文件名大小信息空間,文件名  
  16.     totalBytes += outBlock.size();  
  17.     //這里的總大小是文件名大小等信息和實(shí)際文件大小的總和  
  18.     sendOut.device()->seek(0);  
  19.     sendOut<<totalBytes<<qint64((outBlock.size() - sizeof(qint64)*2));  
  20.     //返回outBolock的開始,用實(shí)際的大小信息代替兩個(gè)qint64(0)空間  
  21.     bytesToWrite = totalBytes - tcpClient->write(outBlock);  
  22.     //發(fā)送完頭數(shù)據(jù)后剩余數(shù)據(jù)的大小  
  23.     ui->clientStatusLabel->setText(tr("已連接"));  
  24.     outBlock.resize(0);  

(5)下面是更新進(jìn)度條,也就是發(fā)送文件數(shù)據(jù)。

  1. void Widget::updateClientProgress(qint64 numBytes) //更新進(jìn)度條,實(shí)現(xiàn)文件的傳送  
  2. {  
  3.     bytesWritten += (int)numBytes;  
  4.     //已經(jīng)發(fā)送數(shù)據(jù)的大小  
  5.     if(bytesToWrite > 0) //如果已經(jīng)發(fā)送了數(shù)據(jù)  
  6.     {  
  7.         outBlock = localFile->read(qMin(bytesToWrite,loadSize));  
  8.       //每次發(fā)送loadSize大小的數(shù)據(jù),這里設(shè)置為4KB,如果剩余的數(shù)據(jù)不足4KB,  
  9.       //就發(fā)送剩余數(shù)據(jù)的大小  
  10.         bytesToWrite -= (int)tcpClient->write(outBlock);  
  11.        //發(fā)送完一次數(shù)據(jù)后還剩余數(shù)據(jù)的大小  
  12.         outBlock.resize(0);  
  13.         //清空發(fā)送緩沖區(qū)  
  14.     }  
  15.     else  
  16.     {  
  17.         localFile->close(); //如果沒有發(fā)送任何數(shù)據(jù),則關(guān)閉文件  
  18.     }  
  19.     ui->clientProgressBar->setMaximum(totalBytes);  
  20.     ui->clientProgressBar->setValue(bytesWritten);  
  21.     //更新進(jìn)度條  
  22.     if(bytesWritten == totalBytes) //發(fā)送完畢  
  23.     {  
  24.         ui->clientStatusLabel->setText(tr(“傳送文件 %1 成功”).arg(fileName));  
  25.         localFile->close();  
  26.         tcpClient->close();  
  27.     }  

(6)實(shí)現(xiàn)錯(cuò)誤處理函數(shù)。

  1. void Widget::displayError(QAbstractSocket::SocketError) //顯示錯(cuò)誤  
  2. {  
  3.     qDebug() << tcpClient->errorString();  
  4.     tcpClient->close();  
  5.     ui->clientProgressBar->reset();  
  6.     ui->clientStatusLabel->setText(tr(“客戶端就緒”));  
  7.     ui->sendButton->setEnabled(true);  

(7)我們從widget.ui中分別進(jìn)行“打開”按鈕和“發(fā)送”按鈕的單擊事件槽函數(shù),然后更改如下。

  1. void Widget::on_openButton_clicked() //打開按鈕  
  2. {  
  3.     openFile();  
  4. }  
  5. void Widget::on_sendButton_clicked() //發(fā)送按鈕  
  6. {  
  7.     send();  

5.我們?yōu)榱耸钩绦蛑械闹形牟伙@示亂碼,在main.cpp文件中更改。

添加頭文件:#include <QTextCodec>

在main函數(shù)中添加代碼:QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

6.運(yùn)行程序,效果如下。

Qt網(wǎng)絡(luò)之TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

7.程序整體思路分析。

我們設(shè)計(jì)好界面,然后按下“打開”按鈕,選擇我們要發(fā)送的文件,這時(shí)調(diào)用了openFile()函數(shù)。然后我們點(diǎn)擊“發(fā)送”按鈕,調(diào)用send()函數(shù),與服務(wù)器進(jìn)行連接。當(dāng)連接成功時(shí)就會發(fā)出connected()信號,這時(shí)就會執(zhí)行startTransfer()函數(shù),進(jìn)行文件頭結(jié)構(gòu)的發(fā)送,當(dāng)發(fā)送成功時(shí)就會發(fā)出bytesWritten(qint64)信號,這時(shí)我們執(zhí)行updateClientProgress(qint64 numBytes)進(jìn)行文件數(shù)據(jù)的傳輸和進(jìn)度條的更新。這里使用了一個(gè)loadSize變量,我們在構(gòu)造函數(shù)中將其初始化為4*1024即4字節(jié),它的作用是,我們將整個(gè)大的文件分成很多小的部分進(jìn)行發(fā)送,每部分為4字節(jié)。而當(dāng)連接出現(xiàn)問題時(shí)就會發(fā)出error(QAbstractSocket::SocketError)信號,這時(shí)就會執(zhí)行displayError()函數(shù)。對于程序中其他細(xì)節(jié)我們就不再分析,希望大家能自己編程研究一下。

#p#

二、服務(wù)器端。

我們在服務(wù)器端進(jìn)行數(shù)據(jù)的接收。服務(wù)器端程序是很簡單的,我們開始進(jìn)行監(jiān)聽,一旦發(fā)現(xiàn)有連接請求就發(fā)出newConnection()信號,然后我們便接受連接,開始接收數(shù)據(jù)。

1、新建工程,名字為“tcpReceiver”。

2、我們更改widget.ui文件,設(shè)計(jì)界面如下。

Qt網(wǎng)絡(luò)之TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

其中“服務(wù)器端”Label的objectName為serverStatusLabel;進(jìn)度條Progress Bar的objectName為serverProgressBar,設(shè)置其value屬性為0;“開始監(jiān)聽”按鈕的objectName為startButton。

效果如下。

3、更改widget.h文件的內(nèi)容。

(1)添加頭文件:#include <QtNetwork>

(2)添加私有變量:

  1.  QTcpServer tcpServer;  
  2. QTcpSocket *tcpServerConnection;  
  3. qint64 totalBytes;  //存放總大小信息  
  4. qint64 bytesReceived;  //已收到數(shù)據(jù)的大小  
  5. qint64 fileNameSize;  //文件名的大小信息  
  6. QString fileName;   //存放文件名  
  7. QFile *localFile;   //本地文件  
  8. eArray inBlock;   //數(shù)據(jù)緩沖區(qū) 

(3)添加私有槽函數(shù):

  1. private slots:  
  2.     void on_startButton_clicked();  
  3.     void start();   //開始監(jiān)聽  
  4.     void acceptConnection();  //建立連接  
  5.     void updateServerProgress();  //更新進(jìn)度條,接收數(shù)據(jù)  
  6. void displayError(QAbstractSocket::SocketError socketError);  
  7.  //顯示錯(cuò)誤 

4、更改widget.cpp文件。

(1)在構(gòu)造函數(shù)中添加代碼:

  1. totalBytes = 0;  
  2.     bytesReceived = 0;  
  3.     fileNameSize = 0;  
  4.     connect(&tcpServer,SIGNAL(newConnection()),this,  
  5. SLOT(acceptConnection())); 

//當(dāng)發(fā)現(xiàn)新連接時(shí)發(fā)出newConnection()信號

(2)實(shí)現(xiàn)start()函數(shù)。

  1. void Widget::start() //開始監(jiān)聽  
  2. {  
  3.     ui->startButton->setEnabled(false);  
  4.     bytesReceived =0;  
  5.     if(!tcpServer.listen(QHostAddress::LocalHost,6666))  
  6.     {  
  7.         qDebug() << tcpServer.errorString();  
  8.         close();  
  9.         return;  
  10.     }  
  11.     ui->serverStatusLabel->setText(tr(“監(jiān)聽”));  

(3)實(shí)現(xiàn)接受連接函數(shù)。

  1. void Widget::acceptConnection()  //接受連接  
  2. {  
  3.     tcpServertcpServerConnection = tcpServer.nextPendingConnection();  
  4. connect(tcpServerConnection,SIGNAL(readyRead()),this,  
  5. SLOT(updateServerProgress()));  
  6.     connect(tcpServerConnection,  
  7. SIGNAL(error(QAbstractSocket::SocketError)),this,  
  8.             SLOT(displayError(QAbstractSocket::SocketError)));  
  9.     ui->serverStatusLabel->setText(tr(“接受連接”));  
  10.     tcpServer.close();  

(4)實(shí)現(xiàn)更新進(jìn)度條函數(shù)。

  1. void Widget::updateServerProgress()  //更新進(jìn)度條,接收數(shù)據(jù)  
  2.  
  3. {  
  4.  
  5.    QDataStream in(tcpServerConnection);  
  6.  
  7.    in.setVersion(QDataStream::Qt_4_6);  
  8.  
  9.    if(bytesReceived <= sizeof(qint64)*2)  
  10.  
  11.    { //如果接收到的數(shù)據(jù)小于16個(gè)字節(jié),那么是剛開始接收數(shù)據(jù),我們保存到//來的頭文件信息  
  12.  
  13.         if((tcpServerConnection->bytesAvailable() >= sizeof(qint64)*2)  
  14.  
  15.             && (fileNameSize == 0))  
  16.  
  17.         { //接收數(shù)據(jù)總大小信息和文件名大小信息  
  18.  
  19.             in >> totalBytes >> fileNameSize;  
  20.  
  21.             bytesReceived += sizeof(qint64) * 2;  
  22.  
  23.         }  
  24.  
  25.         if((tcpServerConnection->bytesAvailable() >= fileNameSize)  
  26.  
  27.             && (fileNameSize != 0))  
  28.  
  29.         {  //接收文件名,并建立文件  
  30.  
  31.             in >> fileName;  
  32.  
  33.             ui->serverStatusLabel->setText(tr(“接收文件 %1 …”)  
  34.  
  35.                                            .arg(fileName));  
  36.             bytesReceived += fileNameSize;  
  37.            localFile = new QFile(fileName);  
  38.             if(!localFile->open(QFile::WriteOnly))  
  39.             {  
  40.                 qDebug() << “open file error!”;  
  41.                 return;  
  42.             }  
  43.         }  
  44.         else return;  
  45.    }  
  46.    if(bytesReceived < totalBytes)  
  47.    {  //如果接收的數(shù)據(jù)小于總數(shù)據(jù),那么寫入文件  
  48.        bytesReceived += tcpServerConnection->bytesAvailable();  
  49.        inBlock = tcpServerConnection->readAll();  
  50.        localFile->write(inBlock);  
  51.        inBlock.resize(0);  
  52.    }  
  53.    ui->serverProgressBar->setMaximum(totalBytes);  
  54.    ui->serverProgressBar->setValue(bytesReceived);  
  55.    //更新進(jìn)度條  
  56.    if(bytesReceived == totalBytes)  
  57.    { //接收數(shù)據(jù)完成時(shí)  
  58.     tcpServerConnection->close();  
  59.     localFile->close();  
  60.     ui->startButton->setEnabled(true);  
  61. ui->serverStatusLabel->setText(tr(“接收文件 %1 成功!”)  
  62. .arg(fileName));  
  63.    }  

(5)錯(cuò)誤處理函數(shù)。

  1. void Widget::displayError(QAbstractSocket::SocketError) //錯(cuò)誤處理  
  2. {  
  3.     qDebug() << tcpServerConnection->errorString();  
  4.     tcpServerConnection->close();  
  5.     ui->serverProgressBar->reset();  
  6.     ui->serverStatusLabel->setText(tr(“服務(wù)端就緒”));  
  7.     ui->startButton->setEnabled(true);  

(6)我們在widget.ui中進(jìn)入“開始監(jiān)聽”按鈕的單擊事件槽函數(shù),更改如下。

  1. void Widget::on_startButton_clicked() //開始監(jiān)聽按鈕  
  2. {  
  3.     start();  

5.我們?yōu)榱耸钩绦蛑械闹形牟伙@示亂碼,在main.cpp文件中更改。

添加頭文件:#include <QTextCodec>

在main函數(shù)中添加代碼:QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

6.運(yùn)行程序,并同時(shí)運(yùn)行tcpSender程序,效果如下。

Qt網(wǎng)絡(luò)之TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)

我們先在服務(wù)器端按下“開始監(jiān)聽”按鈕,然后在客戶端輸入主機(jī)地址和端口號,然后打開要發(fā)送的文件,點(diǎn)擊“發(fā)送”按鈕進(jìn)行發(fā)送。

在這兩節(jié)里我們介紹了TCP的應(yīng)用,可以看到服務(wù)器端和客戶度端都可以當(dāng)做發(fā)送端或者接收端,而且數(shù)據(jù)的發(fā)送與接收只要使用相對應(yīng)的協(xié)議即可,它是可以根據(jù)用戶的需要來進(jìn)行編程的,沒有固定的格式。

本文章原創(chuàng)于 www.yafeilinux.com 

小結(jié):Qt網(wǎng)絡(luò)TCP 下篇 網(wǎng)絡(luò)學(xué)習(xí)基礎(chǔ)的內(nèi)容介紹完了,希望本文內(nèi)容對你有所幫助!最后推薦相關(guān)的資料:】

http://mobile.51cto.com/symbian-268176.htm       qt網(wǎng)絡(luò)
http://mobile.51cto.com/symbian-268170.htm       http 編程
http://mobile.51cto.com/symbian-268167_1.htm     獲取網(wǎng)絡(luò)地址

責(zé)任編輯:zhaolei 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-06-27 10:15:22

Qt 網(wǎng)絡(luò) TCP

2011-06-27 09:02:18

Qt UDP 網(wǎng)絡(luò)

2011-06-27 09:47:43

2011-06-02 10:28:18

2011-06-02 11:21:59

Tftp

2011-06-02 14:36:22

Runas

2011-06-02 14:36:19

Route

2011-06-02 10:28:15

網(wǎng)絡(luò)命令Arp

2011-06-02 11:34:31

Nbtstat

2011-06-02 14:36:25

Netstat

2011-06-02 10:28:21

Rsh

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-10 12:17:52

Qt 網(wǎng)絡(luò)

2011-06-10 12:44:09

2011-06-02 10:28:11

網(wǎng)絡(luò)命令

2020-07-28 08:38:10

TCPUDP協(xié)議

2011-06-30 16:08:05

Qt 字庫 QPF

2011-06-22 14:47:51

QT 多線程 QObject

2015-05-28 10:47:38

Unix網(wǎng)絡(luò)編程TCP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

黄色大片中文字幕| 国内成+人亚洲+欧美+综合在线| 成人午夜激情影院| 自拍视频国产精品| 韩国精品一区二区三区六区色诱| 一区二区三区在线观看免费视频| av午夜在线观看| 中文字幕一区二区三区在线视频| 日韩欧美在线一区| 国产综合色一区二区三区| 最新一区二区三区| 日韩毛片免费视频一级特黄| 久久网站最新地址| 91精品国产色综合| 一边摸一边做爽的视频17国产 | 成人一区在线观看| 国产99视频精品免视看7| 精品人妻一区二区免费| 手机在线免费av| 国产美女视频91| 久久精品国产99国产精品澳门| 污污视频网站免费观看| 99视频免费看| 久久久久亚洲| 91精品国产综合久久精品app| 神马影院我不卡| 秋霞av一区二区三区| 蜜桃a∨噜噜一区二区三区| 婷婷开心激情综合| 久久国产精品亚洲va麻豆| 国产精彩视频在线| 久久夜色精品国产噜噜av小说| 亚洲午夜在线观看视频在线| 国产精品一区在线播放| 国产午夜精品一区二区理论影院| 欧洲美女日日| 欧美裸体一区二区三区| 国产麻豆电影在线观看| 99热精品在线播放| 免播放器亚洲一区| 久久在线免费观看视频| 人妻 丝袜美腿 中文字幕| 日本免费在线一区| 欧洲生活片亚洲生活在线观看| 亚洲不卡一卡2卡三卡4卡5卡精品| 天天干天天干天天| 精品国产一区二区三区久久久蜜臀| 精品日韩一区二区三区| 97超碰青青草| 久草中文在线| 成人av网站免费观看| 日韩美女主播视频| 午夜毛片在线观看| 日韩欧美高清| 亚洲成人久久网| 久久久久久久激情| 日本中文字幕在线2020| 成人激情小说乱人伦| 99视频免费观看蜜桃视频| 国产精品xxxx喷水欧美| 成人综合专区| 亚洲第一区中文字幕| av地址在线观看| 免费观看欧美大片| 欧美国产1区2区| 97欧洲一区二区精品免费| wwwxxx亚洲| 国产精品入口66mio| www.亚洲成人| 99免费观看视频| 高清日韩中文字幕| 欧美三级韩国三级日本三斤| 欧妇女乱妇女乱视频| 日本黄色免费视频| 国产在线一区观看| 91九色偷拍| 色婷婷激情五月| 韩国v欧美v亚洲v日本v| 亚洲综合色激情五月| 无码人妻丰满熟妇精品| 日本不卡123| 7777免费精品视频| 精品成人无码久久久久久| 美女视频黄a大片欧美| 亚洲一区二区三区香蕉 | 唐人社导航福利精品| 在线观看精品一区| 欧美污在线观看| 666av成人影院在线观看| 亚洲激情自拍偷拍| 中日韩在线视频| 成人av一区| 91视频一区二区三区| 成人h视频在线观看| 三级小视频在线观看| 欧美韩国日本不卡| 蜜桃视频成人| 五月天婷婷视频| 成人午夜短视频| 欧美高清视频一区二区三区在线观看| 国产后入清纯学生妹| 91麻豆国产自产在线观看| 亚洲激情一区二区三区| av2020不卡| 欧美日韩一区久久| 波多野结衣有码| 老司机在线精品视频| 在线观看久久久久久| 国产精品密蕾丝袜| 久久93精品国产91久久综合| 久久精品视频亚洲| 色老头一区二区| 成人av电影在线播放| 一区二区三区精品国产| 色开心亚洲综合| 精品成人乱色一区二区| 国产传媒免费观看| 成人动漫视频在线观看| 91麻豆精品久久久久蜜臀| 久久6免费视频| 国产亚洲第一伦理第一区| 亚洲欧美综合精品久久成人| 舐め犯し波多野结衣在线观看| 欧美国产精品| 国自产精品手机在线观看视频| 久久久精品视频免费观看| 亚洲区综合中文字幕日日| 国产成人精品久久| 亚洲专区第一页| 国产精品66部| 国产日韩在线一区二区三区| 国产三区视频在线观看| 精品视频一区三区九区| 久久丫精品国产亚洲av不卡| 国产日韩欧美一区二区三区| 91精品国产高清| 蜜臀av免费在线观看| 亚洲理论在线观看| 国模无码视频一区二区三区| 日韩高清成人| 亚洲欧美日韩一区在线| 中国1级黄色片| 欧美有码视频| 91免费国产网站| 欧美一区二区三区成人片在线| 国产精品超碰97尤物18| 日韩专区第三页| 超碰激情在线| 欧美日韩一卡二卡| 国产真人做爰视频免费| 天堂va蜜桃一区二区三区漫画版| 国产精品视频不卡| 亚洲精品国产av| 91美女蜜桃在线| 亚洲 自拍 另类小说综合图区| 天堂av一区| 亚洲人成在线观看网站高清| 91玉足脚交嫩脚丫在线播放| 91视频免费观看| 国产免费人做人爱午夜视频| 国产麻豆精品| 另类色图亚洲色图| 精品国产伦一区二区三| 久久在线免费观看| 日韩一级免费在线观看| 日本a级不卡| 成人激情春色网| 亚洲欧美日韩成人在线| 狠狠久久五月精品中文字幕| 午夜视频在线网站| 一区二区三区四区在线看| 久久国产精品久久久久| 国产免费一级视频| 国产精品色婷婷| 日本a级片免费观看| 欧美人与拘性视交免费看| 国产精品久久久av| 日本韩国在线观看| 色av一区二区| 亚洲中文字幕无码av| 欧美日韩一区二区三区视频播放| 国产精品99导航| 麻豆tv免费在线观看| 精品久久久一区二区| 欧美成人午夜精品免费| 蜜桃在线一区二区三区| 欧美国产视频一区| 在线观看欧美理论a影院| 国产日韩欧美一二三区| 国模吧精品人体gogo| 亚洲超丰满肉感bbw| 亚洲三级在线视频| 99国产精品| 国产精品麻豆免费版| 成人小电影网站| 久久久精品国产一区二区| 天堂网在线播放| 欧美日韩精品三区| 少妇精品无码一区二区免费视频| 久久精品久久99精品久久| 欧美综合激情| 波多野结衣久久精品| 久久精品国产96久久久香蕉| 午夜激情小视频| 777久久久精品| 亚洲GV成人无码久久精品| jiyouzz国产精品久久| 精品丰满人妻无套内射| 精品国产一区二区三区久久久樱花 | 日本污视频网站| 香蕉精品999视频一区二区| 国产66精品久久久久999小说| 秋霞成人影院| 日韩精品有码在线观看| 91看片在线播放| 中文字幕在线观看不卡视频| 国产十八熟妇av成人一区| 狠狠色综合色综合网络| 情侣黄网站免费看| 激情久久久久| 久久久久久久久一区| 国产成人免费av一区二区午夜| 热久久这里只有精品| 国产黄色在线播放| 欧美视频在线一区二区三区| 国产jizz18女人高潮| 激情小说亚洲一区| 日本xxxxxxx免费视频| 在线播放一区| 欧美性猛交内射兽交老熟妇| 欧美gayvideo| 亚洲一区二区三区毛片 | 91在线短视频| 亚洲一区有码| 欧美区在线播放| 无码国产精品一区二区免费16| 911精品国产一区二区在线| 波多野结衣mp4| 日韩理论在线观看| 亚洲精品中文字幕乱码无线| 精品av久久久久电影| 激情五月五月婷婷| 999久久久精品一区二区| 91精品国产乱码久久久久久久久| 亚洲综合影视| 亚洲欧美日本另类| 四虎在线观看| 欧美久久久久免费| 中国老头性行为xxxx| 亚洲精品综合在线| 特一级黄色录像| 综合av第一页| 欧洲猛交xxxx乱大交3| 一区二区三区在线观看欧美| 免看一级a毛片一片成人不卡| 91亚洲精品久久久蜜桃网站 | 九色综合国产一区二区三区| 国产精品视频一二三四区| 综合激情一区| 欧美黄色免费网址| 亚洲第一黄色| 亚洲乱码中文字幕久久孕妇黑人| 亚洲欧美成人综合| 久久久久久久久久久久久久国产| 日韩国产精品久久久| 97碰在线视频| 99在线|亚洲一区二区| 伊人成色综合网| 日日骚欧美日韩| 亚洲一区二区三区四区五区| 国产中文一区二区三区| 国产人妻黑人一区二区三区| 91免费在线播放| 超碰97av在线| 一区二区三区久久| 国产成人精品视频免费| 亚洲欧洲综合另类| 国产大片中文字幕| 色婷婷久久久久swag精品 | 亚洲视频天天射| 99久久精品免费精品国产| 中字幕一区二区三区乱码| 亚洲视频一区在线| 国产情侣在线视频| 欧美图片一区二区三区| 亚洲成人一级片| 亚洲精品资源美女情侣酒店| a中文在线播放| 欧美激情一级欧美精品| 尤物在线视频| 欧美高清视频在线观看| а天堂中文在线官网| 这里只有精品丝袜| 婷婷在线播放| 国产成人aa精品一区在线播放| 日韩午夜电影免费看| 国产一区二区自拍| 国产精品久久占久久| 婷婷久久五月天| 欧美freesex交免费视频| 91黄色小网站| 国产精品一二三| 欧美国产日韩在线视频| 久久综合久久综合九色| 久久免费看少妇高潮v片特黄| 久久久www成人免费毛片麻豆| 成人免费无码大片a毛片| 国产精品国产三级国产普通话蜜臀 | 懂色一区二区三区av片| 欧美色图激情小说| 男人插女人视频在线观看| 麻豆精品蜜桃视频网站| 波多野结衣福利| 亚洲小说欧美激情另类| 97国产成人无码精品久久久| 欧美日韩激情一区二区三区| 午夜小视频在线播放| 欧美大荫蒂xxx| 日韩大陆av| 日韩免费毛片| 波多野结衣的一区二区三区| 成人免费播放器| 国产激情视频一区二区三区欧美| 色欲狠狠躁天天躁无码中文字幕 | 日韩成人av在线资源| 精品一卡二卡三卡四卡日本乱码 | 黄色成人美女网站| 免费成人进口网站| 激情综合亚洲精品| 人人妻人人澡人人爽| 色欧美88888久久久久久影院| 欧美 日韩 国产 成人 在线 91 | 九色porny丨入口在线| 7m精品福利视频导航| 亚洲成av人片在线观看www| 亚洲欧洲另类精品久久综合| 久久国产一二区| 中文字幕资源在线观看| 国产区在线观看成人精品| 久久精品视频7| 日韩精品在线观| 久草在线资源福利站| 久久久久久久久久久久久久久久av| 亚洲黄色视屏| 无码内射中文字幕岛国片| 91亚洲大成网污www| 日本在线视频中文字幕| 欧美伊人精品成人久久综合97| 香蕉视频免费看| 欧美性受xxxx白人性爽| 精品久久毛片| 国产精品日韩欧美一区二区三区| 午夜精品亚洲| 婷婷五月精品中文字幕| 亚洲成人激情av| 在线观看国产成人| 日韩在线视频播放| 色爱综合区网| 国产91亚洲精品一区二区三区| 狠狠88综合久久久久综合网| 精品免费国产一区二区| 久久蜜桃av一区精品变态类天堂| 天堂网视频在线| 中文字幕日本欧美| 亚洲a成人v| 91亚洲精品国产| 99久久久无码国产精品| 中文字幕在线天堂| 久久精品中文字幕免费mv| 午夜日韩影院| 99热在线这里只有精品| 国产欧美一区二区精品性色| 亚洲午夜激情视频| 欧美片一区二区三区| 天堂日韩电影| 亚洲小视频网站| 亚洲午夜久久久久久久久电影院| 天堂成人在线观看| 国产精品视频免费在线观看| 欧美va亚洲va日韩∨a综合色| 老司机免费视频| 欧美丝袜第三区| 美女精品导航| 91系列在线观看| 亚洲免费成人| 欧美极品jizzhd欧美18| 精品欧美黑人一区二区三区| 忘忧草在线日韩www影院| av一区二区三区四区电影| 国产欧美一区二区色老头 | 一区二区三区四区在线免费观看 | 欧美女人性生活视频| 国产精品久久午夜夜伦鲁鲁| 亚洲AV无码乱码国产精品牛牛| 日本91av在线播放| 欧美日一区二区三区在线观看国产免| 亚洲 激情 在线| 中文字幕二三区不卡| 丰满肉肉bbwwbbww| 欧美激情在线一区|