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

寶杉的博客

UNIX/LINUX;ACE;SNMP;C++
posts - 33, comments - 23, trackbacks - 0, articles - 0

 

 錯(cuò)誤

#include   <iostream.h>
#include   <string.h>

……

string   st("test   string");  

……

error   C2065:   'string'   :   undeclared   identifier  

解釋

#include   <string>  

using   namespace   std;  

因?yàn)樵?  using   namespace   std;   情況下, 

#include   <string>     是使用   C++     string   類(lèi)庫(kù); 

#include   <cstring>     是使用   C   的string   操作庫(kù)函數(shù)   ...  

細(xì)節(jié) 加不加“.h”

#include <iostream.h>

#include <string>

using       namespace      std;

沒(méi)有錯(cuò)!!

#include <iostream.h>

#include <string.h>

using       namespace      std;

編譯有錯(cuò)!!

解釋

  “string.h“這個(gè)頭文件是“舊式c頭文件”,而這個(gè)文件中沒(méi)有定義string類(lèi)(這點(diǎn)應(yīng)該不奇怪,c語(yǔ)言中哪有什么類(lèi)啊),這個(gè)頭文件里面是有關(guān)“舊式char-based字符串”的操作函數(shù),注意都是操作char*字符串的“函數(shù)”,所以你引用這個(gè)頭文件,編譯器肯定找不到“string”了。  
  “string”這個(gè)頭文件(沒(méi)有擴(kuò)展名)是C++標(biāo)準(zhǔn)化之后的C++頭文件,里面才有string類(lèi)的相關(guān)定義(其實(shí),string并不是類(lèi),是一個(gè)typedef,但是使用的時(shí)候不用去管他),而C++標(biāo)準(zhǔn)頭文件中的東西都放在namespace   std中了,所以使用的時(shí)候要“using   namespace   std”。  
  附:建議樓主不要用"iostream.h",改成“iostream”吧,因?yàn)闃?biāo)準(zhǔn)已經(jīng)明確規(guī)定不在支持"iostream.h"這種頭文件了。

標(biāo)準(zhǔn)寫(xiě)法

#include <iostream>

#include <string>

using       namespace      std;

 

F: 為什么using   namespace   std;  
       要寫(xiě)在include后面?

Q: 因?yàn)閕nclude的文件包含名字域std  
如果你把using   namespace   std寫(xiě)在前面,編譯器就看不到std這個(gè)名字

posted @ 2007-08-03 13:01 寶杉 閱讀(426) | 評(píng)論 (0)編輯 收藏

 

引用即別名,數(shù)組不能引用。

引用提高效率,又不在函數(shù)中改變。參考:file:///F:/fragments/documents/深入探討C++中的引用%20-%20KiRa的專(zhuān)欄%20-%20CSDNBlog.mht

 

常引用

常引用聲明方式:const 類(lèi)型標(biāo)識(shí)符 &引用名 = 目標(biāo)變量名;

const類(lèi)型 和 & 是分不開(kāi)的,引用一般定義成const。

 

引用作為返回值

要以引用返回函數(shù)值,則函數(shù)定義時(shí)要按以下格式:

類(lèi)型標(biāo)識(shí)符 &函數(shù)名(形參列表及類(lèi)型說(shuō)明)
{

函數(shù)體

}

說(shuō)明:

  (1)以引用返回函數(shù)值,定義函數(shù)時(shí)需要在函數(shù)名前加&

  (2)用引用返回一個(gè)函數(shù)值的最大好處是,在內(nèi)存中不產(chǎn)生被返回值的副本。

例子:Diary files\C++exams\rtn_ref

 

引用作為返回值,必須遵守以下規(guī)則:

(1)不能返回局部變量的引用。這條可以參照Effective C++[1]的Item 31。主要原因是局部變量會(huì)在函數(shù)返回后被銷(xiāo)毀,因此被返回的引用就成為了"無(wú)所指"的引用,程序會(huì)進(jìn)入未知狀態(tài)。

(2)不能返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。這條可以參照Effective C++[1]的Item 31。雖然不存在局部變量的被動(dòng)銷(xiāo)毀問(wèn)題,可對(duì)于這種情況(返回函數(shù)內(nèi)部new分配內(nèi)存的引用),又面臨其它尷尬局面。例如,被函數(shù)返回的引用只是作為一個(gè)臨時(shí)變量出現(xiàn),而沒(méi)有被賦予一個(gè)實(shí)際的變量,那么這個(gè)引用所指向的空間(由new分配)就無(wú)法釋放,造成memory leak。

(3)可以返回類(lèi)成員的引用,但最好是const。這條原則可以參照Effective C++[1]的Item 30。主要原因是當(dāng)對(duì)象的屬性是與某種業(yè)務(wù)規(guī)則(business rule)相關(guān)聯(lián)的時(shí)候,其賦值常常與某些其它屬性或者對(duì)象的狀態(tài)有關(guān),因此有必要將賦值操作封裝在一個(gè)業(yè)務(wù)規(guī)則當(dāng)中。如果其它對(duì)象可以獲得該屬性的非常量引用(或指針),那么對(duì)該屬性的單純賦值就會(huì)破壞業(yè)務(wù)規(guī)則的完整性。

(4)引用與一些操作符的重載:

  流操作符<<和>>,這兩個(gè)操作符常常希望被連續(xù)使用,例如:cout << "hello" << endl; 因此這兩個(gè)操作符的返回值應(yīng)該是一個(gè)仍然支持這兩個(gè)操作符的流引用。可選的其它方案包括:返回一個(gè)流對(duì)象和返回一個(gè)流對(duì)象指針。但是對(duì)于返回一個(gè)流對(duì)象,程序必須重新(拷貝)構(gòu)造一個(gè)新的流對(duì)象,也就是說(shuō),連續(xù)的兩個(gè)<<操作符實(shí)際上是針對(duì)不同對(duì)象的!這無(wú)法讓人接受。對(duì)于返回一個(gè)流指針則不能連續(xù)使用<<操作符。因此,返回一個(gè)流對(duì)象引用是惟一選擇。這個(gè)唯一選擇很關(guān)鍵,它說(shuō)明了引用的重要性以及無(wú)可替代性,也許這就是C++語(yǔ)言中引入引用這個(gè)概念的原因吧。 賦值操作符=。這個(gè)操作符象流操作符一樣,是可以連續(xù)使用的,例如:x = j = 10;或者(x=10)=100;賦值操作符的返回值必須是一個(gè)左值,以便可以被繼續(xù)賦值。因此引用成了這個(gè)操作符的惟一返回值選擇。

posted @ 2007-08-03 13:00 寶杉 閱讀(208) | 評(píng)論 (0)編輯 收藏

 

在Visual C++中,可以在函數(shù)類(lèi)型前加_cdecl,_stdcall或者_(dá)pascal來(lái)表示其調(diào)用規(guī)范(默認(rèn)為_(kāi)cdecl)

// 被調(diào)用函數(shù)是以int為參數(shù),以int為返回值
__stdcall int callee(int);

// 調(diào)用函數(shù)以函數(shù)指針為參數(shù)
void caller( __cdecl int(*ptr)(int));

// 在p中企圖存儲(chǔ)被調(diào)用函數(shù)地址的非法操作
__cdecl int(*p)(int) = callee; // 出錯(cuò)

指針p和callee()的類(lèi)型不兼容,因?yàn)樗鼈冇胁煌恼{(diào)用規(guī)范。因此不能將被調(diào)用者的地址賦值給指針p,盡管兩者有相同的返回值和參數(shù)列。 

posted @ 2007-08-03 12:59 寶杉 閱讀(524) | 評(píng)論 (0)編輯 收藏

 

聲明:

先定義函數(shù),void print(string str);

聲明一個(gè)函數(shù)指針,void ( *p )( string ) = NULL;

指向copy函數(shù),p = & print; 或 p = print;

調(diào)用指針函數(shù),p( “hello” );

 

可以把多個(gè)函數(shù)放在一個(gè)指針數(shù)組里,然后通過(guò)數(shù)組對(duì)應(yīng)指針?lè)奖阏{(diào)用函數(shù)。

例子:Diary files\C++exams\pointer_func

 

動(dòng)態(tài)綁定一個(gè)函數(shù)

void caller(void(*ptr)())

{

ptr();             /* 調(diào)用ptr指向的函數(shù) */

}

void func();

int main()

{

p = func;

caller(p); /* 傳遞函數(shù)地址到調(diào)用者 */

}

如果賦了不同的值給p(不同函數(shù)地址),那么調(diào)用者將調(diào)用不同地址的函數(shù)。賦值可以發(fā)生在運(yùn)行時(shí),這樣使你能實(shí)現(xiàn)動(dòng)態(tài)綁定。

posted @ 2007-08-03 12:58 寶杉 閱讀(149) | 評(píng)論 (0)編輯 收藏

靜態(tài)聯(lián)編:運(yùn)行之前就完成的聯(lián)編,系統(tǒng)在編譯時(shí)就決定如何完成某個(gè)動(dòng)作。
動(dòng)態(tài)聯(lián)編:程序運(yùn)行之后才完成的聯(lián)編,系統(tǒng)在運(yùn)行時(shí)動(dòng)態(tài)實(shí)現(xiàn)某一動(dòng)作。
靜態(tài)多態(tài)性:函數(shù)重載;運(yùn)算符重載;
動(dòng)態(tài)多態(tài)性:繼承;虛函數(shù);
函數(shù)重載
1 參數(shù)有差別。
2 參數(shù)相同,屬不同類(lèi)。
一個(gè)重載的例子:Diary files\C++exams\func_reload
 
名字壓延:是編譯器根據(jù)函數(shù)重載的不同類(lèi)型,在編譯時(shí)改變函數(shù)名字,而達(dá)到區(qū)分的目的。

posted @ 2007-08-03 12:57 寶杉 閱讀(154) | 評(píng)論 (0)編輯 收藏

友元函數(shù)一般在類(lèi)中聲明,如果一個(gè)友元需要訪問(wèn)多個(gè)類(lèi)的對(duì)象,那么每個(gè)類(lèi)都要聲明一次友元函數(shù)。

還要注意:友元函數(shù)的入口包括多個(gè)類(lèi),那這些類(lèi)都要在友元函數(shù)之前聲明。

如例子:Diary files\C++exams\frnd_vst2_func

如果是類(lèi)person的兩個(gè)繼承他的子類(lèi)boy和girl,那么友元函數(shù)如何聲明和定義。

Diary files\C++exams\frnd_member

這需要注意的地方有:

基類(lèi)的數(shù)據(jù)成員共有;構(gòu)造函數(shù);構(gòu)造函數(shù)初始化表;類(lèi)的聲明先于友元函數(shù),提高了重用性;

基類(lèi)的數(shù)據(jù)成員必須共有,因?yàn)闃?gòu)造函數(shù)會(huì)訪問(wèn)到它們,子類(lèi)的構(gòu)造函數(shù)也會(huì)引用基類(lèi)的構(gòu)造函數(shù),如果是私有的會(huì)是的子類(lèi)構(gòu)造函數(shù)不能直接訪問(wèn)基類(lèi)的私有成員,要通過(guò)基類(lèi)的成員函數(shù)來(lái)訪問(wèn)。

子類(lèi):public基類(lèi)

 

還有寫(xiě)細(xì)節(jié)問(wèn)題:

頭文件;char *a的聲明和使用;分配char*數(shù)據(jù);

例如:

char *name;

name = new char[ strlen( s ) + 1 ];

 

友元函數(shù)的聲明時(shí)的入口參數(shù)可以只寫(xiě)類(lèi)型,不寫(xiě)參數(shù)名。

例如:

class boy

{

       ……

       void disp( gril & );

}

注意聲明時(shí)的入口參數(shù)可省略,但要寫(xiě)&。

定義時(shí),寫(xiě)成

void disp( gril &x ){      ……       }

posted @ 2007-08-03 12:55 寶杉 閱讀(1032) | 評(píng)論 (0)編輯 收藏

 

聲明:           類(lèi)    對(duì)象;     類(lèi)       *指針;

                   int  i;           <class>      *this;

 

this指針是一個(gè)隱含指針,是成員函數(shù)所屬對(duì)象的指針。

每個(gè)成員函數(shù)都有一個(gè)this指針,this指針指向該函數(shù)所屬類(lèi)的對(duì)象。

 

使用格式:this -> 成員變量

 

不同的對(duì)象調(diào)用同一個(gè)成員函數(shù),C++會(huì)根據(jù)成員函數(shù)的this指針指向哪一個(gè)對(duì)象,來(lái)調(diào)用該對(duì)象的成員變量。

 

this指針如何得到對(duì)象名?

例如:一個(gè)類(lèi)class me的初始化函數(shù):

void init(char ma, int mb)

{ a = ma; b = mb; }

編譯時(shí),被編譯器轉(zhuǎn)化為:

       void init(me *this, char ma, int mb)     //多了一個(gè)this指針的參數(shù),指向me類(lèi)的obj

      { this -> a = ma, this -> b = mb; }

posted @ 2007-08-03 12:53 寶杉 閱讀(295) | 評(píng)論 (0)編輯 收藏

 

   對(duì)于只做輸入用的指針參數(shù),最好用const,這樣避免指針參數(shù)被修改。

   比如:對(duì)于上面的StringCopy的例子,寫(xiě)成

   void StringCopy (char *strDestination, const char *strSource);         //比較安全。

   但是如果輸入?yún)?shù)以值傳遞的形式傳遞對(duì)象,則改為使用const &最好,因?yàn)槭∪チ伺R時(shí)對(duì)象的構(gòu)造和解析的過(guò)程,提高效率和安全性。

 

   int printf(……);這個(gè)函數(shù)的參數(shù)不確定,沒(méi)有嚴(yán)格的類(lèi)型檢查,所以最好不用。

posted @ 2007-08-03 12:52 寶杉 閱讀(365) | 評(píng)論 (1)編輯 收藏

 

1 介紹

此文描述了組成ACE框架的Reactor模式的設(shè)計(jì)和執(zhí)行。Reactor負(fù)責(zé)處理由一個(gè)或多個(gè)client并發(fā)的傳遞給一個(gè)應(yīng)用程序的服務(wù)請(qǐng)求。應(yīng)用程序的每個(gè)服務(wù)由一個(gè)分離的event handler(事件句柄)執(zhí)行,event handler包括一個(gè)或多個(gè)進(jìn)程的服務(wù)器特殊請(qǐng)求的方法。

       此文描述的Reactor模式的執(zhí)行,event handler分發(fā)是由ACE_Reactor實(shí)現(xiàn)的。ACE_Reactor結(jié)合I/O事件的分離器,以及其他類(lèi)型的時(shí)間,比如timers和signals。ACE_Reactor的核心實(shí)現(xiàn)是基于同步事件分離,比如select或者WaitForMultipleObjects。當(dāng)分離器指示指定的事件發(fā)生了,ACE_Reactor會(huì)自動(dòng)分發(fā)預(yù)先注冊(cè)的事件句柄的方法。注冊(cè)的event handler方法會(huì)完成應(yīng)用程序?qū)?yīng)請(qǐng)求事件的服務(wù)。

       本文組織如下:第二章描述ACE_Reactor框架主要特性;第三章大致介紹ACE_Reactor實(shí)現(xiàn)的OO(面向?qū)ο螅┰O(shè)計(jì);第四章舉了服務(wù)器端實(shí)現(xiàn)的例子,用以證明ACE_Reactor怎樣簡(jiǎn)化并發(fā)的,基于事件的網(wǎng)絡(luò)應(yīng)用程序的發(fā)展;第五章描述當(dāng)使用ACE_Reactor開(kāi)發(fā)基于事件的應(yīng)用程序的設(shè)計(jì)規(guī)則;第六章是結(jié)束語(yǔ)。

2 ACE_Reactor的特性

ACE_Reactor提供OO的事件分離機(jī)制和消息分發(fā)框架,它簡(jiǎn)化基于事件的應(yīng)用程序的開(kāi)發(fā)。以下特性是:

OO的事件分離和消息分發(fā)接口:

使用ACE_Reactor的應(yīng)用程序不直接調(diào)用底層OS(操作系統(tǒng))的事件分離API函數(shù)。比如select或WaitForMultipleObjects。他們繼承ACE Event Handler基類(lèi)并創(chuàng)建了具體的event handlers。這個(gè)類(lèi)用特定的虛擬函數(shù)處理不同類(lèi)型的事件,比如I/O事件,timer事件,signals(信號(hào)量機(jī)制),和同步事件。

應(yīng)用程序用Reactor框架創(chuàng)建具體的event handler,并注冊(cè)他們。特性1顯示了ACE Reactor.的關(guān)鍵組件。這個(gè)特性描述執(zhí)行日子服務(wù)的事件句柄,這個(gè)在第四章講述。

posted @ 2007-08-03 12:42 寶杉 閱讀(1611) | 評(píng)論 (0)編輯 收藏

      ACE中的流包裝提供面向連接的通信。流數(shù)據(jù)傳輸包裝類(lèi)包括ACE_SOCK_Stream和ACE_LSOCK_Stream,它們分別包裝TCP/IP和UNIX域socket協(xié)議數(shù)據(jù)傳輸功能。連接建立類(lèi)包括針對(duì)TCP/IP的ACE_SOCK_Connector和ACE_SOCK_Acceptor,以及針對(duì)UNIX域socket的ACE_LSOCK_Connector和ACE_LSOCK_Acceptor。
      Acceptor類(lèi)用于被動(dòng)地接受連接(使用BSD accept()調(diào)用),而Connector類(lèi)用于主動(dòng)地建立連接(使用BSD connect()調(diào)用)。
      下面的例子演示接收器和連接器是怎樣用于建立連接的。該連接隨后將用于使用流數(shù)據(jù)傳輸類(lèi)來(lái)傳輸數(shù)據(jù)。

server端代碼:
// 環(huán)境VC6.0+ACE5.4.2
// proj:ACE stream server
// date:07-7-24
// robin
//

#include "stdafx.h"

#include "ace/Log_Msg.h"
#include "ace/Time_Value.h"
#include "ace/OS.h"


#include "ace/SOCK_Acceptor.h"
#include "ace/SOCK_Stream.h"

#define SIZE_DATA 18
#define SIZE_BUF 1024
#define NO_ITERATIONS 5

class Server
{
public:
 Server (int port) : server_addr_(port),peer_acceptor_(server_addr_)
 {
  data_buf_ = new char[SIZE_BUF];
 }

 //Handle the connection once it has been established. Here the
 //connection is handled by reading SIZE_DATA amount of data from the
 //remote and then closing the connection stream down.

 int handle_connection()
 {
  // Read data from client
  for(int i=0;i<NO_ITERATIONS;i++)
  {
   int byte_count=0;
   if( (byte_count = new_stream_.recv_n(data_buf_, SIZE_DATA, 0) ) == -1 )
    ACE_ERROR ((LM_ERROR, "%p\n", "Error in recv"));
   else
   {
    data_buf_[byte_count]=0;
    ACE_DEBUG((LM_DEBUG,"Server received %s \n",data_buf_));
   }
  }

  // Close new endpoint
  if (new_stream_.close () == -1)
   ACE_ERROR ((LM_ERROR, "%p\n", "close"));
  return 0;
 }


 //Use the acceptor component peer_acceptor_ to accept the connection
 //into the underlying stream new_stream_. After the connection has been
 //established call the handle_connection() method.
 
 int accept_connections ()
 {
  if (peer_acceptor_.get_local_addr (server_addr_) == -1)
   ACE_ERROR_RETURN ((LM_ERROR,"%p\n","Error in get_local_addr"),1);
  ACE_DEBUG ((LM_DEBUG,"Starting server at port %d\n",
   server_addr_.get_port_number ()));
  
  // Performs the iterative server activities.

  while(1)
  {
   ACE_Time_Value timeout (ACE_DEFAULT_TIMEOUT);
   if (peer_acceptor_.accept(new_stream_, &client_addr_, &timeout)== -1)
   {
    ACE_ERROR ((LM_ERROR, "%p\n", "accept"));
    continue;
   }
   else
   {
    ACE_DEBUG((LM_DEBUG,
     "Connection established with remote %s:%d\n",
     client_addr_.get_host_name(),client_addr_.get_port_number()));

    //Handle the connection
    handle_connection();
   }
  }
 }

private:
 char *data_buf_;
 ACE_INET_Addr server_addr_;
 ACE_INET_Addr client_addr_;
 ACE_SOCK_Acceptor peer_acceptor_;
 ACE_SOCK_Stream new_stream_;
};


int main (int argc, char *argv[])
{
 if(argc<2)
 {
  ACE_ERROR((LM_ERROR,"Usage %s <port_num>", argv[0]));
  ACE_OS::exit(1);
 }

// char *ip;
// ip = new char[strlen("192.168.1.160")];
// Server server(ACE_OS::atoi(ip));  //argv[1])

 Server server(ACE_OS::atoi(argv[1]));
 server.accept_connections();
 return 0;
}

client端:
// proj:ACE stream client
// client
// date:7-24
// robin

#include "stdafx.h"

//******additional*******//
#include "ace/Log_Msg.h"  //ACE_ERROR ACE_DEBUG
#include "ace/Time_Value.h"  // ACE_Time_Value
#include "ace/OS.h"    // ACE_OS::atoi exit
//******additional*******//

#include "ace/SOCK_Connector.h"
#include "ace/INET_Addr.h"

#define SIZE_BUF 128
#define NO_ITERATIONS 5


class Client
{
public:
 Client(char *hostname, int port):remote_addr_(port,hostname)
 {
  data_buf_="Hello from Client";
 }

 //Uses a connector component `connector_’ to connect to a
 //remote machine and pass the connection into a stream
 //component client_stream_
 int connect_to_server()
 {
  // Initiate blocking connection with server.
  ACE_DEBUG ((LM_DEBUG, "(%P|%t) Starting connect to %s:%d\n",
   remote_addr_.get_host_name(),remote_addr_.get_port_number()));
  if (connector_.connect (client_stream_, remote_addr_) == -1)
   ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) %p\n","connection failed"),-1);
  else
   ACE_DEBUG ((LM_DEBUG,"(%P|%t) connected to %s\n",
   remote_addr_.get_host_name ()));
  return 0;
 }


 //Uses a stream component to send data to the remote host.
 int send_to_server()
 {
  // Send data to server
  for(int i=0;i<NO_ITERATIONS; i++)
  {
   if (client_stream_.send_n (data_buf_,
    ACE_OS::strlen(data_buf_)+1, 0) == -1)
   {
    ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) %p\n","send_n"),0);
    break;
   }
  }
  //Close down the connection
  close();
 }

 //Close down the connection properly.
 int close()
 {
  if (client_stream_.close () == -1)
   ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) %p\n","close"),-1);
  else
   return 0;
 }
private:
 ACE_SOCK_Stream client_stream_;
 ACE_INET_Addr remote_addr_;
 ACE_SOCK_Connector connector_;
 char *data_buf_;
};


int main(int argc, char* argv[])
{
 if(argc<3)
 {
  ACE_DEBUG((LM_DEBUG,"Usage %s <hostname> <port_number>\n", argv[0]));
  ACE_OS::exit(1);
 }

 Client client(argv[1],ACE_OS::atoi(argv[2]));
 client.connect_to_server();
 client.send_to_server();
 return 0;
}


運(yùn)行結(jié)果:
cmd里到exe目錄下,先啟動(dòng)服務(wù)端server.exe 192.168.1.160
如圖1:

正在輪詢等待。

再到client服務(wù)端,同樣的方法
運(yùn)行命令行參數(shù)格式 client.exe 192.168.1.160 192
 解析:ACE_DEBUG((LM_DEBUG,"Usage %s <hostname> <port_number>\n", argv[0]));
         命令行參數(shù)為 <hostname><port> = <192.168.1.160><192>
         端口是由圖1的第二行顯示,不是自己設(shè)定的。
如圖2:

只是照搬書(shū)上的例子,后面打算自己分析一下。

posted @ 2007-07-25 10:57 寶杉 閱讀(1440) | 評(píng)論 (2)編輯 收藏

僅列出標(biāo)題
共4頁(yè): 1 2 3 4 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国内自拍一区| 美国十次了思思久久精品导航| 午夜久久美女| 麻豆精品视频在线观看视频| 激情久久五月天| 久久久女女女女999久久| 欧美成人免费全部| 国产日韩欧美综合精品| 欧美成人a∨高清免费观看| 99精品福利视频| 亚洲高清在线观看一区| 在线欧美小视频| 国产日韩欧美在线看| 欧美日韩综合另类| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲午夜激情| 亚洲天堂免费观看| 久久久久高清| 午夜伦理片一区| 亚洲专区一二三| 欧美 日韩 国产 一区| 日韩视频一区| 亚洲日本成人| 日韩视频久久| 欧美成人国产va精品日本一级| 日韩午夜精品视频| 99国产精品| 亚洲手机在线| 亚洲精品一区在线观看香蕉| 亚洲精品欧美| 亚洲一区区二区| 亚洲欧美日韩一区在线观看| 嫩草国产精品入口| 久久成人免费视频| 久久亚洲色图| 午夜精品久久久久99热蜜桃导演| 欧美激情一区二区三区高清视频| 欧美男人的天堂| 欧美日韩另类国产亚洲欧美一级| 欧美精品一区二| 欧美精品1区| 亚洲欧洲日本专区| 久久中文在线| 欧美黄色一区| 久久精品在线免费观看| 久久美女性网| 欧美大片在线影院| 国产精品xxx在线观看www| 伊大人香蕉综合8在线视| 91久久黄色| 国产精品一区久久| 激情久久五月天| 亚洲精品视频在线看| 亚洲一区二区三区高清| 国产一区二区三区久久悠悠色av| 国产亚洲第一区| 亚洲国产欧美不卡在线观看| 99天天综合性| 亚洲欧美日韩在线一区| 久久精品123| 亚洲电影免费观看高清完整版在线| 欧美诱惑福利视频| 蜜臀99久久精品久久久久久软件 | 在线视频亚洲一区| 亚洲午夜精品在线| 午夜精品一区二区三区在线| 午夜天堂精品久久久久| 久久精品av麻豆的观看方式| 亚洲二区在线观看| 亚洲免费小视频| 欧美va亚洲va国产综合| 国产精品视频1区| 亚洲黄色成人| 久久激情久久| 99视频精品全部免费在线| 久久国产精品网站| 欧美日韩少妇| 亚洲国产岛国毛片在线| 亚洲一区在线免费观看| 久久人91精品久久久久久不卡| 亚洲欧洲日本mm| 久久精品亚洲一区二区| 欧美激情第4页| 伊人婷婷久久| 久久国产精品久久久久久电车| 亚洲欧洲精品一区二区| 久久不射中文字幕| 久久夜色撩人精品| 国产日韩欧美91| 亚洲永久免费av| 最新精品在线| 久久一综合视频| 国产亚洲一区精品| 欧美电影资源| 久久黄色网页| 久久久久久久欧美精品| 久久成人精品电影| 午夜精品福利视频| 国产精品久久久久久久午夜片| 亚洲欧美国产另类| 欧美激情91| 亚洲一区二区综合| 精东粉嫩av免费一区二区三区| 一区二区三区在线视频免费观看 | 欧美电影免费观看网站| 宅男精品导航| 欧美电影免费| 久久国产天堂福利天堂| 亚洲免费不卡| 激情一区二区三区| 国产精品乱子乱xxxx| 免费在线观看精品| 久久精品一区二区三区四区 | 好看不卡的中文字幕| 欧美日韩精品一区二区天天拍小说 | 亚洲自拍三区| 一区二区视频欧美| 欧美色视频在线| 亚洲小说欧美另类社区| 欧美在线免费观看亚洲| 亚洲欧洲日韩综合二区| 国产婷婷97碰碰久久人人蜜臀| 欧美日韩1区| 美女视频网站黄色亚洲| 欧美亚洲一区二区在线观看| 一区二区三区欧美在线| 亚洲日本va午夜在线影院| 久久精品一二三区| 欧美在线一级va免费观看| 亚洲男人的天堂在线aⅴ视频| 日韩视频在线观看一区二区| 在线观看成人一级片| 韩国三级电影久久久久久| 国产精品永久| 国产伦精品一区二区三区免费| 欧美日韩一区二区三区视频| 欧美人成在线视频| 欧美日韩精品久久| 欧美日韩直播| 国产精品久久久久av免费| 欧美日韩午夜剧场| 欧美三级日韩三级国产三级| 欧美日在线观看| 国产精品va在线| 国产精品久久亚洲7777| 国产精品热久久久久夜色精品三区| 欧美日韩一区二区三区高清| 欧美日韩在线另类| 欧美无砖砖区免费| 亚洲激情欧美| 亚洲激情黄色| 亚洲视频网在线直播| 午夜精品免费在线| 久久国产精品久久国产精品| 久久精品一区二区国产| 免费不卡亚洲欧美| 欧美日韩国产片| 国产精品日韩久久久久| 国产午夜精品一区理论片飘花| 国产一区在线免费观看| 亚洲国产精品视频一区| 亚洲精品综合精品自拍| 亚洲一区3d动漫同人无遮挡| 久久av老司机精品网站导航| 老司机67194精品线观看| 欧美激情中文字幕在线| 日韩视频第一页| 午夜精品影院在线观看| 久久乐国产精品| 欧美精品九九99久久| 国产精品福利在线观看网址| 国产一区二区三区在线观看免费| 亚洲第一区在线| 亚洲少妇在线| 久久综合影视| 一区二区免费看| 麻豆成人小视频| 国产精品久在线观看| 在线高清一区| 先锋亚洲精品| 亚洲第一黄色网| 亚洲免费视频中文字幕| 久色成人在线| 欧美午夜电影一区| 激情综合视频| 亚洲视频精品| 欧美aⅴ99久久黑人专区| 亚洲天堂成人在线视频| 麻豆成人在线观看| 国产精品一区视频网站| 亚洲另类黄色| 久久久一区二区| 一区二区三区视频在线播放| 久久综合色天天久久综合图片| 国产精品久久久久永久免费观看| 亚洲黄色精品| 久久久久一区二区三区| 一本色道久久综合亚洲精品不| 另类av导航| 国产一区清纯|