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

寶杉的博客

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>
            久久综合99re88久久爱| 韩国av一区二区三区| 亚洲欧美一区二区三区在线| 亚洲电影专区| 久久综合一区二区三区| 久久精品天堂| 欧美日韩精品一区二区三区四区| 久久精品中文字幕一区二区三区| 欧美午夜精品伦理| 久久国产精品网站| 韩日视频一区| 91久久精品美女| 一区二区三区三区在线| 国产精品99久久不卡二区| 久久成人精品电影| 免费亚洲一区| 一本久道久久久| 久久国产直播| 欧美精品18videos性欧美| 国产精品区一区二区三| 亚洲动漫精品| 亚洲在线免费| 免费欧美日韩| 99国内精品久久| 久久精品一区二区三区四区| 欧美成人午夜激情视频| 国产精品va在线| 亚洲国产成人不卡| 欧美一级理论片| 日韩视频在线一区| 国产精品国产一区二区| 欧美美女操人视频| 国产精品高精视频免费| 日韩亚洲精品视频| 欧美91大片| 久久久久久国产精品mv| 亚洲——在线| 久久午夜视频| 亚洲高清不卡| 欧美一区二区三区久久精品茉莉花 | 亚洲成人直播| 欧美日韩国产一区| 一区二区三区在线免费播放| 一区二区冒白浆视频| 久久在线观看视频| 亚洲欧美韩国| 欧美日韩国产综合一区二区| 国产综合色产在线精品| 亚洲男女毛片无遮挡| 亚洲二区在线视频| 欧美在线观看视频一区二区三区| 欧美精品电影在线| 亚洲第一在线综合网站| 午夜精品一区二区三区在线| 亚洲电影观看| 久久久久综合网| 国产一区二区三区在线观看视频 | 亚洲高清中文字幕| 久久精品中文字幕免费mv| 国产精品乱码人人做人人爱| 亚洲手机视频| 一道本一区二区| 欧美日韩午夜| 亚洲愉拍自拍另类高清精品| 日韩网站在线| 欧美日韩视频免费播放| 一区二区三区免费在线观看| 亚洲狼人精品一区二区三区| 欧美日韩在线一区二区| 亚洲你懂的在线视频| 亚洲综合视频一区| 国内外成人免费激情在线视频 | 在线观看的日韩av| 久久久久国产精品厨房| 亚洲欧美日韩国产一区二区| 国产精品www| 欧美在线视频一区二区| 欧美在线视频播放| 亚洲国产高清一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美77777| 亚洲美女av黄| 亚洲一区在线免费| 激情欧美一区二区三区| 亚洲电影毛片| 国产精品乱码久久久久久| 久久九九国产| 女人天堂亚洲aⅴ在线观看| 亚洲麻豆一区| 午夜精品福利视频| 红杏aⅴ成人免费视频| 亚洲国产精品第一区二区三区| 欧美人妖另类| 欧美有码在线视频| 你懂的国产精品| 亚洲男同1069视频| 久久一区激情| 亚洲自拍偷拍视频| 久久久久久久久伊人| 日韩亚洲欧美一区| 欧美一区二粉嫩精品国产一线天| 在线免费观看日本欧美| 日韩写真在线| 国产一区二区三区高清播放| 欧美激情女人20p| 一本色道久久综合| 蜜桃精品久久久久久久免费影院| 国内精品伊人久久久久av影院 | 日韩午夜av| 欧美大学生性色视频| 欧美在线高清视频| 午夜天堂精品久久久久| 亚洲精品国产视频| 亚洲一区二区黄| 亚洲免费视频一区二区| 亚洲高清一区二区三区| 欧美日韩精品免费观看| 欧美大色视频| 国产日韩欧美自拍| 亚洲中午字幕| 最新国产拍偷乱拍精品| 9国产精品视频| 日韩视频在线免费| 国产欧美日韩高清| 亚洲激情偷拍| 精久久久久久| 一区二区三区|亚洲午夜| 亚洲韩国青草视频| 亚洲一区二区视频| 国产一区二区三区久久 | 亚洲视频一区在线观看| 免费观看30秒视频久久| 久久精品国产第一区二区三区| 欧美日韩精品在线播放| 欧美激情精品久久久久久蜜臀| 伊人久久男人天堂| 久久精品成人一区二区三区| 久久精品国产精品亚洲精品| 国产精自产拍久久久久久| 亚洲一区在线看| 亚洲视频1区| 欧美日韩国产色站一区二区三区| 亚洲国产精品久久久久秋霞影院| 亚洲第一精品夜夜躁人人躁| 欧美一区二区三区婷婷月色| 欧美一区二区三区的| 欧美激情在线免费观看| 亚洲精品网站在线播放gif| 夜夜爽www精品| 老司机亚洲精品| 欧美激情视频在线播放 | 欧美亚洲视频一区二区| 欧美亚州在线观看| 亚洲一区二区伦理| 亚洲一区二区三区中文字幕在线| 欧美日在线观看| 中文av一区二区| 欧美一区二区视频网站| 国产午夜精品久久久久久久| 性8sex亚洲区入口| 久久午夜影视| 亚洲日韩中文字幕在线播放| 欧美a级一区二区| 99国产麻豆精品| 欧美一区91| 国产综合精品一区| 欧美—级高清免费播放| 亚洲伊人伊色伊影伊综合网| 久久国产精品久久久| 在线观看亚洲a| 欧美日韩在线综合| 久久成人国产| 亚洲精品免费一二三区| 销魂美女一区二区三区视频在线| 国产一区二区高清不卡| 蜜臀a∨国产成人精品| 一区二区三区精品国产| 久久另类ts人妖一区二区| 一本久久a久久精品亚洲| 国产亚洲欧洲| 欧美三级视频在线| 久久夜色精品国产噜噜av| 在线亚洲精品福利网址导航| 美女视频一区免费观看| 亚洲一二三区在线观看| 亚洲盗摄视频| 国产午夜精品久久| 国产精品久久久久9999吃药| 久久综合99re88久久爱| 在线亚洲欧美视频| 欧美国产亚洲另类动漫| 久久久精彩视频| 亚洲男人天堂2024| 夜夜狂射影院欧美极品| 亚洲黄色有码视频| 国产亚洲欧美一区| 国产精品a级| 欧美黄在线观看| 免费观看成人网| 久久色在线播放|