青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Boost.Asio翻譯(三)[轉(zhuǎn)]

Posted on 2009-01-31 00:58 S.l.e!ep.¢% 閱讀(1557) 評論(0)  編輯 收藏 引用 所屬分類: C++

Daytime.1 - A synchronous TCP daytime client

一個同步的 TCP daytime 客戶端 ?

?

This tutorial program shows how to use asio to implement a client application with TCP.

We start by including the necessary header files.

?本示例程序顯示如何使用Asio來實現(xiàn)一個TCP客戶端程序。

讓我們從添加必需的頭文件開始。

						
								
										
#include? < iostream >
#include?
< boost / array.hpp >
#include?
< boost / asio.hpp >

The purpose of this application is to access a daytime service, so we need the user to specify the server.

這個應(yīng)用程序的目的是訪問一個daytime服務(wù)器,因此我們需要用戶去指定服務(wù)器。(如time-nw.nist.gov,用IP亦可)

						
								
										
using ?boost::asio::ip::tcp;

int ?main( int ?argc,? char * ?argv[])
{
??
try
??{
????
if ?(argc? != ? 2 )
????{
??????std::cerr?
<< ? " Usage:?client?<host> " ? << ?std::endl;
??????
return ? 1 ;
????}

All programs that use asio need to have at least one boost::asio::io_service object.

所有使用 asio 的程序都至少需要一個boost::asio::io_service對象

						
								
????boost::asio::io_service?io_service;

We need to turn the server name that was specified as a parameter to the application, into a TCP endpoint. To do this we use an boost::asio::ip::tcp::resolver object.

?我們需要把服務(wù)器的名稱轉(zhuǎn)化為TCP的節(jié)點,而該名稱是通過應(yīng)用程序的參數(shù)指定的。我們使用boost::asio::ip::tcp::resolver 對象來完成。

						
								
????tcp::resolver?resolver(io_service);

A resolver takes a query object and turns it into a list of endpoints. We construct a query using the name of the server, specified in argv[1], and the name of the service, in this case "daytime".

一個 resolver 對象 獲得一個 query 對象 , 并將其轉(zhuǎn)換為節(jié)點列表 . 我們 通過 argv[1] 中的 服務(wù)器名稱 服務(wù)名,在這里是 daytime ,構(gòu)造一個 query ??

?

						
								
???tcp::resolver::query?query(argv[ 1 ],? " daytime " );

The list of endpoints is returned using an iterator of type boost::asio::ip::tcp::resolver::iterator. A default constructed boost::asio::ip::tcp::resolver::iterator object is used as the end iterator.

節(jié)點列表用 boost::asio::ip::tcp::resolver::iterator 類型的迭代器返回。返回的 iterator 將采用 boos t::asio::ip::tcp::resolver::iterator 的默認構(gòu)造函數(shù)來構(gòu)造。

						
								
????tcp::resolver::iterator?endpoint_iterator? = ?resolver.resolve(query);
????tcp::resolver::iterator?end;

Now we create and connect the socket. The list of endpoints obtained above may contain both IPv4 and IPv6 endpoints, so we need to try each of them until we find one that works. This keeps the client program independent of a specific IP version.

現(xiàn)在我們建立一個socket并連接之,由于獲得的節(jié)點既有IPv4也有IPv6的。所以,我們需要依次嘗試訪問它們直到找到一個可以正常工作的。這樣做可使得我們的程序獨立于特定的IP版本。

						
								
????tcp::socket?socket(io_service);
????boost::system::error_code?error?
= ?boost::asio::error::host_not_found;
????
while ?(error? && ?endpoint_iterator? != ?end)
????{
??????socket.close();
??????socket.connect(
* endpoint_iterator ++ ,?error);
????}
????
if ?(error)
??????
throw ?boost::system::system_error(error);

The connection is open. All we need to do now is read the response from the daytime service.

We use a boost::array to hold the received data. The boost::asio::buffer() function automatically determines the size of the array to help prevent buffer overruns. Instead of a boost::array, we could have used a char[] or std::vector.

連接打開后,現(xiàn)在我們需要做的就是讀取daytime服務(wù)器的響應(yīng)。

我們使用boost::array 來存放接收到的數(shù)據(jù)。boost::asio::buffer()函數(shù)會自動確定array的長度來防止緩沖區(qū)溢出。我們也可以使用 char[]?或 std::vector來代替boost::array。

						
								
???? for ?(;;)
????{
??????boost::array
< char ,? 128 > ?buf;
??????boost::system::error_code?error;

??????size_t?len?
= ?socket.read_some(boost::asio::buffer(buf),?error);

When the server closes the connection, the boost::asio::ip::tcp::socket::read_some() function will exit with the boost::asio::error::eof error, which is how we know to exit the loop.

當(dāng)服務(wù)器關(guān)閉連接時,boost::asio::ip::tcp::socket::read_some() 函數(shù) boost::asio::error::eof 錯誤 標(biāo)志 返回 , 通過該錯誤標(biāo)志,我們知道應(yīng)該退出循環(huán)了

						
								
?????? if ?(error? == ?boost::asio::error::eof)
????????
break ;? // ?Connection?closed?cleanly?by?peer.
?????? else ? if ?(error)
????????
throw ?boost::system::system_error(error);? // ?Some?other?error.

??????std::cout.write(buf.data(),?len);
????}

Finally, handle any exceptions that may have been thrown.

最后,處理所有可能拋出的異常

						
								
??}
??
catch ?(std::exception & ?e)
??{
????std::cerr?
<< ?e.what()? << ?std::endl;
??}

See the full source listing

完整代碼:

//
// ?client.cpp
// ?~~~~~~~~~~
//
// ?Copyright?(c)?2003-2008?Christopher?M.?Kohlhoff?(chris?at?kohlhoff?dot?com)
//
// ?Distributed?under?the?Boost?Software?License,?Version?1.0.?(See?accompanying? // ?file?LICENSE_1_0.txt?or?copy?at? http://www.boost.org/LICENSE_1_0.txt )
//

#include?
< iostream >
#include?
< boost / array.hpp >
#include?
< boost / asio.hpp >

using ?boost::asio::ip::tcp;

int ?main( int ?argc,? char * ?argv[])
{
??
try
??{
????
if ?(argc? != ? 2 )
????{
??????std::cerr?
<< ? " Usage:?client?<host> " ? << ?std::endl;
??????
return ? 1 ;
????}

????boost::asio::io_service?io_service;

????tcp::resolver?resolver(io_service);
????tcp::resolver::query?query(argv[
1 ],? " daytime " );
????tcp::resolver::iterator?endpoint_iterator?
= ?resolver.resolve(query);
????tcp::resolver::iterator?end;

????tcp::socket?socket(io_service);
????boost::system::error_code?error?
= ?boost::asio::error::host_not_found;
????
while ?(error? && ?endpoint_iterator? != ?end)
????{
??????socket.close();
??????socket.connect(
* endpoint_iterator ++ ,?error);
????}
????
if ?(error)
??????
throw ?boost::system::system_error(error);

????
for ?(;;)
????{
??????boost::array
< char ,? 128 > ?buf;
??????boost::system::error_code?error;

??????size_t?len?
= ?socket.read_some(boost::asio::buffer(buf),?error);

??????
if ?(error? == ?boost::asio::error::eof)
????????
break ;? // ?Connection?closed?cleanly?by?peer.
?????? else ? if ?(error)
????????
throw ?boost::system::system_error(error);? // ?Some?other?error.

??????std::cout.write(buf.data(),?len);
????}
??}
??
catch ?(std::exception & ?e)
??{
????std::cerr?
<< ?e.what()? << ?std::endl;
??}

??
return ? 0 ;
}

Daytime.2 - A synchronous TCP daytime server

一個同步的 TCP daytime 服務(wù)器

This tutorial program shows how to use asio to implement a server application with TCP.

?本示例示范如何使用Asio來實現(xiàn)一個TCP服務(wù)器程序。

										
												
														
#include? < ctime >
#include?
< iostream >
#include?
< string >
#include?
< boost / asio.hpp >

using ?boost::asio::ip::tcp;

We define the function make_daytime_string() to create the string to be sent back to the client. This function will be reused in all of our daytime server applications.

我們先定義一個make_daytime_string()來產(chǎn)生需要發(fā)送給客戶端的字符串.這個函數(shù)會在我們所有的daytime服務(wù)器上被使用。

										
												
														
std:: string ?make_daytime_string()
{
??
using ? namespace ?std;? // ?For?time_t,?time?and?ctime;
??time_t?now? = ?time( 0 );
??
return ?ctime( & now);
}

int ?main()
{
??
try
??{
????boost::asio::io_service?io_service;

A boost::asio::ip::tcp::acceptor object needs to be created to listen for new connections. It is initialised to listen on TCP port 13, for IP version 4.

新建一個asio::ip::tcp::acceptor對象來監(jiān)聽新的連接。該對象應(yīng)遵守IPv4協(xié)議,監(jiān)聽TCP端口13

???

?

tcp::acceptor?acceptor(io_service,?tcp::endpoint(tcp::v4(),? 13 ));

?

This is an iterative server, which means that it will handle one connection at a time. Create a socket that will represent the connection to the client, and then wait for a connection.

這是一個iterative server,也就是說同一時間只能處理一個連接。建立一個表示與客戶端的連接的socket, 然后等待客戶端的連接。

										
												
???? for ?(;;)
????{
??????tcp::socket?socket(io_service);
??????acceptor.accept(socket);

A client is accessing our service. Determine the current time and transfer this information to the client.

當(dāng)客戶端訪問服務(wù)器時,獲取當(dāng)前時間,并傳送給客戶端。
										
												
??????std:: string ?message? = ?make_daytime_string();

??????boost::system::error_code?ignored_error;
??????boost::asio::write(socket,?boost::asio::buffer(message),
??????????boost::asio::transfer_all(),?ignored_error);
????}
??}

Finally, handle any exceptions.

最后,

處理異常。

										
												
?? catch ?(std::exception & ?e)
??{
????std::cerr?
<< ?e.what()? << ?std::endl;
??}

??
return ? 0 ;
}

See the full source listing

全部源碼:

//
// ?server.cpp
// ?~~~~~~~~~~
//
// ?Copyright?(c)?2003-2008?Christopher?M.?Kohlhoff?(chris?at?kohlhoff?dot?com)
//
// ?Distributed?under?the?Boost?Software?License,?Version?1.0.?(See?accompanying? // ?file?LICENSE_1_0.txt?or?copy?at? http://www.boost.org/LICENSE_1_0.txt )
//

#include?
< ctime >
#include?
< iostream >
#include?
< string >
#include?
< boost / asio.hpp >

using ?boost::asio::ip::tcp;

std::
string ?make_daytime_string()
{
??
using ? namespace ?std;? // ?For?time_t,?time?and?ctime;
??time_t?now? = ?time( 0 );
??
return ?ctime( & now);
}

int ?main()
{
??
try
??{
????boost::asio::io_service?io_service;

????tcp::acceptor?acceptor(io_service,?tcp::endpoint(tcp::v4(),?
13 ));

????
for ?(;;)
????{
??????tcp::socket?socket(io_service);
??????acceptor.accept(socket);

??????std::
string ?message? = ?make_daytime_string();

??????boost::system::error_code?ignored_error;
??????boost::asio::write(socket,?boost::asio::buffer(message),
??????????boost::asio::transfer_all(),?ignored_error);
????}
??}
??
catch ?(std::exception & ?e)
??{
????std::cerr?
<< ?e.what()? << ?std::endl;
??}

??
return ? 0 ;
}

The main() function

主函數(shù)

														
																
																		
int ?main()
{
??
try
??{

We need to create a server object to accept incoming client connections. The boost::asio::io_service object provides I/O services, such as sockets, that the server object will use.

我們需要創(chuàng)建一個服務(wù)器對象,用來接受客戶端的連接。boost::asio::io_service對象提供了像sockets這樣的I/O服務(wù),這些服務(wù)都是服務(wù)器對象將要使用的。

														
																
????boost::asio::io_service?io_service;
????tcp_server?server(io_service);

Run the boost::asio::io_service object so that it will perform asynchronous operations on your behalf.

運行boost::asio::io_service 對象,它將執(zhí)行你想要的異步操作。

														
																
????io_service.run();
??}
??
catch ?(std::exception & ?e)
??{
????std::cerr?
<< ?e.what()? << ?std::endl;
??}

??
return ? 0 ;
}
The tcp_server class

TCP服務(wù)器類

														
																
																		
class ?tcp_server
{
public :

The constructor initialises an acceptor to listen on TCP port 13.

構(gòu)造函數(shù)初始化一個用于監(jiān)聽TCP 端口13的接收器。

														
																
??tcp_server(boost::asio::io_service & ?io_service)
????:?acceptor_(io_service,?tcp::endpoint(tcp::v4(),?
13 ))
??{
????start_accept();
??}

private :

The function start_accept() creates a socket and initiates an asynchronous accept operation to wait for a new connection.

函數(shù)start_accept ()創(chuàng)建一個socket ,同時啟動一個異步接收操作去等待一個新的連接。

														
																
?? void ?start_accept()
??{
????tcp_connection::pointer?new_connection?
=
??????tcp_connection::create(acceptor_.io_service());

????acceptor_.async_accept(new_connection
-> socket(),
????????boost::bind(
& tcp_server::handle_accept,? this ,?new_connection,
??????????boost::asio::placeholders::error));
??}

The function handle_accept() is called when the asynchronous accept operation initiated by start_accept() finishes. It services the client request, and then calls start_accept() to initiate the next accept operation.

當(dāng)start_accept()啟動的異步接收操作完成后,handle_accept ()函數(shù)將被調(diào)用。它響應(yīng)客戶端的請求,然后調(diào)用start_accept()函數(shù)去啟動另一個接收操作。

														
																
?? void ?handle_accept(tcp_connection::pointer?new_connection,
??????
const ?boost::system::error_code & ?error)
??{
????
if ?( ! error)
????{
??????new_connection
-> start();
??????start_accept();
????}
??}
The tcp_connection class

TCP連接類

We will use shared_ptr and enable_shared_from_this because we want to keep the tcp_connection object alive as long as there is an operation that refers to it.

我們希望只要還有一個操作涉及 tcp_connection對象,該對象就是有效的。因此我們使用shared_ptr enable_shared_from_this

														
																
																		
class ?tcp_connection
??:?
public ?boost::enable_shared_from_this < tcp_connection >
{
public :
??typedef?boost::shared_ptr
< tcp_connection > ?pointer;

??
static ?pointer?create(boost::asio::io_service & ?io_service)
??{
????
return ?pointer( new ?tcp_connection(io_service));
??}

??tcp::socket
& ?socket()
??{
????
return ?socket_;
??}

In the function start(), we call boost::asio::async_write() to serve the data to the client. Note that we are using boost::asio::async_write(), rather than boost::asio::ip::tcp::socket::async_write_some(), to ensure that the entire block of data is sent.

start()函數(shù)中,我們調(diào)用boost::asio::async_write()為客戶端處理數(shù)據(jù)。注意:為了確保數(shù)據(jù)被整塊發(fā)送,我們使用的是boost::asio::async_write(),而不是boost::asio::ip::tcp::socket::async_write_some()。

														
																
?? void ?start()
??{

The data to be sent is stored in the class member message_ as we need to keep the data valid until the asynchronous operation is complete.

要發(fā)送的數(shù)據(jù)保存在類成員變量message_ 中,在異步操作完成前我們需要保證數(shù)據(jù)的有效性。

?

?

????message_? = ?make_daytime_string();

?

When initiating the asynchronous operation, and if using boost::bind(), you must specify only the arguments that match the handler's parameter list. In this program, both of the argument placeholders (boost::asio::placeholders::error and boost::asio::placeholders::bytes_transferred) could potentially have been removed, since they are not being used in handle_write().

當(dāng)啟動一個異步操作時,如果使用boost::bind(),你只需要指定一個符合句柄參數(shù)列表簽名的參數(shù)。在本例中,任何一個參數(shù)占位符(boost::asio::placeholders::error 和boost::asio::placeholders::bytes_transferred)皆可被隱式地移除,因為操作write()并沒有使用它們。

														
																
????boost::asio::async_write(socket_,?boost::asio::buffer(message_),
????????boost::bind(
& tcp_connection::handle_write,?shared_from_this(),
??????????boost::asio::placeholders::error,
??????????boost::asio::placeholders::bytes_transferred));

Any further actions for this client connection are now the responsibility of handle_write().

任何對客戶端連接的下一步操作都由 handle_write() 函數(shù)負責(zé)處理

?

														
																
??}

private :
??tcp_connection(boost::asio::io_service
& ?io_service)
????:?socket_(io_service)
??{
??}

??
void ?handle_write( const ?boost::system::error_code & ? /* error */ ,
??????size_t?
/* bytes_transferred */ )
??{
??}

??tcp::socket?socket_;
??std::
string ?message_;
};
Removing unused handler parameters

移除無用的操作參數(shù)

You may have noticed that the error, and bytes_transferred parameters are not used in the body of the handle_write() function. If parameters are not needed, it is possible to remove them from the function so that it looks like:

你可能已經(jīng)注意到了:error和bytes_transferred 參數(shù)并沒有在 handle_write() 函數(shù)體內(nèi)被應(yīng)用。因此,如果參數(shù)并不是必須的,我們可以移除它們,如下所示:

														
																
?? void ?handle_write()
??{
??}

The boost::asio::async_write() call used to initiate the call can then be changed to just:

用來發(fā)起呼叫的boost::asio::async_write()函數(shù)通常可以被改寫成下面這樣:

														
																
??boost::asio::async_write(socket_,?boost::asio::buffer(message_),
??????boost::bind(
& tcp_connection::handle_write,?shared_from_this()));

See the full source listing

全部源碼:

//
// ?server.cpp
// ?~~~~~~~~~~
//
// ?Copyright?(c)?2003-2008?Christopher?M.?Kohlhoff?(chris?at?kohlhoff?dot?com)
//
// ?Distributed?under?the?Boost?Software?License,?Version?1.0.?(See?accompanying? // ?file?LICENSE_1_0.txt?or?copy?at? http://www.boost.org/LICENSE_1_0.txt )
//

#include?
< ctime >
#include?
< iostream >
#include?
< string >
#include?
< boost / bind.hpp >
#include?
< boost / shared_ptr.hpp >
#include?
< boost / enable_shared_from_this.hpp >
#include?
< boost / asio.hpp >

using ?boost::asio::ip::tcp;

std::
string ?make_daytime_string()
{
??
using ? namespace ?std;? // ?For?time_t,?time?and?ctime;
??time_t?now? = ?time( 0 );
??
return ?ctime( & now);
}

class ?tcp_connection
??:?
public ?boost::enable_shared_from_this < tcp_connection >
{
public :
??typedef?boost::shared_ptr
< tcp_connection > ?pointer;

??
static ?pointer?create(boost::asio::io_service & ?io_service)
??{
????
return ?pointer( new ?tcp_connection(io_service));
??}

??tcp::socket
& ?socket()
??{
????
return ?socket_;
??}

??
void ?start()
??{
????message_?
= ?make_daytime_string();

????boost::asio::async_write(socket_,?boost::asio::buffer(message_),
????????boost::bind(
& tcp_connection::handle_write,?shared_from_this(),
??????????boost::asio::placeholders::error,
??????????boost::asio::placeholders::bytes_transferred));
??}

private :
??tcp_connection(boost::asio::io_service
& ?io_service)
????:?socket_(io_service)
??{
??}

??
void ?handle_write( const ?boost::system::error_code & ? /* error */ ,
??????size_t?
/* bytes_transferred */ )
??{
??}

??tcp::socket?socket_;
??std::
string ?message_;
};

class ?tcp_server
{
public :
??tcp_server(boost::asio::io_service
& ?io_service)
????:?acceptor_(io_service,?tcp::endpoint(tcp::v4(),?
13 ))
??{
????start_accept();
??}

private :
??
void ?start_accept()
??{
????tcp_connection::pointer?new_connection?
=
??????tcp_connection::create(acceptor_.io_service());

????acceptor_.async_accept(new_connection
-> socket(),
????????boost::bind(
& tcp_server::handle_accept,? this ,?new_connection,
??????????boost::asio::placeholders::error));
??}

??
void ?handle_accept(tcp_connection::pointer?new_connection,
??????
const ?boost::system::error_code & ?error)
??{
????
if ?( ! error)
????{
??????new_connection
-> start();
??????start_accept();
????}
??}

??tcp::acceptor?acceptor_;
};

int ?main()
{
??
try
??{
????boost::asio::io_service?io_service;
????tcp_server?server(io_service);
????io_service.run();
??}
??
catch ?(std::exception & ?e)
??{
????std::cerr?
<< ?e.what()? << ?std::endl;
??}

??
return ? 0 ;
}

?

?
posted on 2008-04-20 01:27 王曉軒 閱讀(1533) 評論(0) ?編輯?收藏引用 所屬分類: C\C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美一级二级三级| 一区二区三区欧美日韩| 久久一二三国产| 伊人成年综合电影网| 你懂的视频欧美| 欧美.日韩.国产.一区.二区| 亚洲精品久久久久久一区二区| 亚洲观看高清完整版在线观看| 久久久久久久久久久一区| 亚洲精品乱码久久久久久久久| 91久久精品一区二区别| 国产精品毛片大码女人| 久久婷婷国产麻豆91天堂| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲激情黄色| 亚洲夜晚福利在线观看| 樱桃国产成人精品视频| 亚洲精品影视在线观看| 国产精品毛片大码女人| 玖玖玖国产精品| 欧美区二区三区| 久久久久在线| 欧美剧在线观看| 久久精品亚洲一区| 欧美精品不卡| 久久久久久久久久久久久久一区| 欧美刺激午夜性久久久久久久| 亚洲伊人伊色伊影伊综合网| 久久久不卡网国产精品一区| 一区二区三区视频在线观看| 久久九九国产精品怡红院| 亚洲性线免费观看视频成熟| 久久免费黄色| 欧美一区二区在线免费观看| 欧美成人精品在线观看| 久久精品欧美| 欧美午夜精品久久久久久超碰| 久久亚洲私人国产精品va| 欧美日韩亚洲视频一区| 亚洲电影免费| 国模精品一区二区三区色天香| 99热在线精品观看| 亚洲国产精品专区久久| 久久福利毛片| 欧美一区二区三区免费在线看 | 久久综合九色欧美综合狠狠| 欧美午夜性色大片在线观看| 欧美激情精品久久久久久黑人| 国产视频一区二区在线观看 | 亚洲欧洲一区二区在线观看| 国产在线麻豆精品观看| 一本色道久久88精品综合| 最新国产成人av网站网址麻豆 | 日韩网站免费观看| 亚洲国产精品一区二区www在线 | 91久久久久久国产精品| 国产综合在线看| 亚洲欧美一区二区三区在线 | 亚洲韩国日本中文字幕| 久久男女视频| 男男成人高潮片免费网站| 国语自产偷拍精品视频偷| 亚洲欧美精品中文字幕在线| 午夜亚洲一区| 国产精品亚洲а∨天堂免在线| 宅男精品视频| 小处雏高清一区二区三区| 国产精品亚洲片夜色在线| 亚洲欧美激情四射在线日 | 国产一区二区三区网站| 午夜激情综合网| 久久精品久久综合| 国产自产在线视频一区| 久久精品一区二区三区不卡牛牛| 久久色中文字幕| 在线观看不卡| 欧美+日本+国产+在线a∨观看| 欧美激情网站在线观看| 亚洲看片免费| 国产精品wwwwww| 香蕉乱码成人久久天堂爱免费| 久久国产精品久久国产精品| 国产揄拍国内精品对白| 久久综合网hezyo| 亚洲黄色精品| 午夜精品视频一区| 黄色工厂这里只有精品| 欧美va天堂在线| 中日韩高清电影网| 久久久综合网站| 亚洲精品在线二区| 国产精品久久久久久久久借妻 | 久久久噜噜噜久久人人看| 欧美黄色一区| 性久久久久久久久| 影音欧美亚洲| 欧美视频一区在线| 久久精品国产一区二区三区| 亚洲高清一区二区三区| 午夜精品免费| 亚洲欧洲久久| 国产嫩草影院久久久久| 欧美xx视频| 欧美一区二区精美| 亚洲美女av网站| 久久久久久一区二区| 一本色道久久综合狠狠躁篇的优点| 国产精品乱人伦一区二区| 开心色5月久久精品| 亚洲午夜久久久久久久久电影网| 久久午夜电影网| 亚洲午夜av电影| 亚洲国产精品久久久久| 国产日韩欧美一区| 欧美日韩国产区一| 久久婷婷国产麻豆91天堂| 在线视频日韩| 亚洲欧洲一区二区三区| 久久亚洲春色中文字幕| 亚洲欧美日本精品| 一区二区日韩| 一区二区三区精品视频| 在线精品国精品国产尤物884a| 亚洲人成高清| 久久深夜福利| 久久国产精品亚洲va麻豆| 中文网丁香综合网| 亚洲精品一区二区三区在线观看| 国内自拍一区| 国产女精品视频网站免费| 欧美无砖砖区免费| 欧美精品123区| 欧美91大片| 老司机亚洲精品| 久久久久久综合| 久久精品国产99国产精品| 午夜在线观看免费一区| 亚洲免费在线视频| 亚洲在线视频网站| 亚洲午夜精品在线| 亚洲一线二线三线久久久| 一区二区三区四区五区视频| 99精品国产在热久久| 亚洲精品视频二区| 一本大道久久精品懂色aⅴ| 亚洲伦伦在线| 亚洲一二三区视频在线观看| 正在播放欧美一区| 亚洲视屏在线播放| 亚洲欧美视频一区二区三区| 午夜久久tv| 久久精品亚洲精品国产欧美kt∨| 久久久久久999| 美女黄色成人网| 欧美日韩 国产精品| 欧美日韩国产小视频| 欧美性一区二区| 国产日韩精品久久| 在线观看视频亚洲| 日韩视频在线播放| 亚洲综合国产精品| 久久久久高清| 亚洲国产高清在线| 日韩亚洲欧美一区| 亚洲欧美在线aaa| 久久亚裔精品欧美| 欧美极品影院| 国产精品三上| 尤妮丝一区二区裸体视频| 亚洲国产视频a| 亚洲图片在线观看| 久久精选视频| 亚洲高清视频一区| 亚洲校园激情| 久久精品国产亚洲精品| 欧美成人福利视频| 国产精品久久精品日日| 一区二区三区在线免费视频| 在线视频一区观看| 久久久久久久久久久成人| 亚洲精品小视频在线观看| 午夜精品久久久久久久白皮肤| 蜜臀va亚洲va欧美va天堂| 国产精品嫩草久久久久| 亚洲国产日韩美| 欧美一区成人| 亚洲精选91| 久久久亚洲午夜电影| 国产精品免费网站在线观看| 亚洲精品日韩一| 久久三级视频| 亚洲主播在线观看| 欧美激情一区二区三区高清视频| 国产欧美综合在线| 亚洲午夜在线观看| 欧美激情一区二区三区在线视频 | 亚洲欧洲99久久| 亚洲大片av| 久久精品三级| 国产欧美日韩在线视频|