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

小明思考

高性能服務器端計算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

     摘要: C++源文件編碼問題  閱讀全文

posted @ 2007-04-05 15:30 小明 閱讀(5865) | 評論 (6)編輯 收藏

     摘要: UltraEdit的一個Bug  閱讀全文

posted @ 2007-04-04 13:51 小明 閱讀(3165) | 評論 (5)編輯 收藏

     摘要: 如何讓指針指向自己  閱讀全文

posted @ 2007-04-04 12:16 小明 閱讀(3218) | 評論 (8)編輯 收藏

     摘要: Windbg(CDB) 新手指南  閱讀全文

posted @ 2007-03-13 14:39 小明 閱讀(9227) | 評論 (0)編輯 收藏

也許有人不知道CDB是什么,CDB是windbg的小兄弟,基于command line,對于我這個比較喜歡用command line的人,CDB比windbg更容易上手。

象GDB,CDB這些工具,命令都很多,但是我們只要熟記最常用的"三板斧"就可以工作了。

1.啟動
   1)直接調試:  
      gdb program [core]
      cdb program or cdb -z DumpFile
   2)attach方式
      gdb attach pid
      cdb -pn ExeName or cdb -p pid

2.顯示堆棧
   GDB: bt
   CDB: k

3. 設置斷點
   GDB: b [file:]line
   CDB: bp 'file:line'

4. 運行/繼續運行
   GDB: run [arglist] 
             c   繼續運行 
   CDB: g

5. 單步
   GDB : n (step over) s (step into)
   CDB : p

6. 打印變量的值
    GDB : p expr
    CDB: ? expr

說老實話,CDB過于復雜,學起來比GDB難.

BTW:用CDB之前設置一下symbol的path
set _NT_SYMBOL_PATH=srv*c:\symbols*http://msdl.microsoft.com/download/symbols
   
   

posted @ 2007-03-08 14:33 小明 閱讀(3998) | 評論 (0)編輯 收藏

     摘要: [STL] loop & erase   閱讀全文

posted @ 2006-12-27 18:01 小明 閱讀(9534) | 評論 (12)編輯 收藏

項目需要,寫了一個幫助L10N的工程師計算utf8的小工具(html page)。如下

<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN">
<HTML>
<HEAD>
<TITLE>?An?utf8?count?tool??</TITLE>
<meta?http-equiv="Content-Type"?content="text/html;?charset=utf16">
<script>
????
function?utf16to8(str)?{
????????
var?out,?i,?len,?c;

????????out?
=?"";
????????len?
=?str.length;
????????
for(i?=?0;?i?<?len;?i++)?{
????????c?
=?str.charCodeAt(i);
????????
if?((c?>=?0x0001)?&&?(c?<=?0x007F))?{
????????????out?
+=?str.charAt(i);
????????}?
else?if?(c?>?0x07FF)?{
????????????out?
+=?String.fromCharCode(0xE0?|?((c?>>?12)?&?0x0F));
????????????out?
+=?String.fromCharCode(0x80?|?((c?>>??6)?&?0x3F));
????????????out?
+=?String.fromCharCode(0x80?|?((c?>>??0)?&?0x3F));
????????}?
else?{
????????????out?
+=?String.fromCharCode(0xC0?|?((c?>>??6)?&?0x1F));
????????????out?
+=?String.fromCharCode(0x80?|?((c?>>??0)?&?0x3F));
????????}
????????}
????????
return?out;
????}
????
function?count()
????{
????????
var?temp?=?f1.value;
????????temp
=temp.replace(/\\r/g,"\r");
????????temp
=temp.replace(/\\n/g,"\n");
????????result.innerHTML
=utf16to8(temp).length;
????}
</script>
</HEAD>

<BODY>
<TEXTAREA?id="f1"?NAME="f1"?ROWS="10"?COLS="50"></TEXTAREA>
<br/>
<INPUT?TYPE="button"?value="count?length"?onclick="count()">
<div?id="result"></div>
</BODY>
</HTML>

posted @ 2006-11-08 13:32 小明 閱讀(2529) | 評論 (0)編輯 收藏

     摘要: snprintf的正確用法和錯誤用法  閱讀全文

posted @ 2006-09-29 10:27 小明 閱讀(34549) | 評論 (8)編輯 收藏

     摘要: 工程師必備  閱讀全文

posted @ 2006-09-28 15:30 小明 閱讀(5156) | 評論 (2)編輯 收藏

     摘要: 介紹識別字符編碼的小技巧  閱讀全文

posted @ 2006-09-27 10:00 小明 閱讀(3199) | 評論 (2)編輯 收藏

SendMessageTimeout并不是簡單在SendMessage加上Timeout的功能。

MSDN上面有一段文字是這樣說的

If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages.


翻譯一下:

SendMessage : 如果指定窗口由調用線程創建,那么窗口過程會被當成一個子程序立即調用。如果指定窗口由另外一個線程創建,那么系統會切換到那個線程,并且調用合適的窗口過程。在線程之間傳遞的消息僅僅當接收線程執行message retrieval code才會被處理。發送線程會被堵塞直到接收線程處理完消息。但是,發送線程在等待的同時會處理收到的nonqueued messages 。為了阻止這一點,使用帶有SMTO_BLOCK參數 的SendMessageTimeout .

=================================華麗的分割線===========================

我曾經遇到這個問題,我調用SendMessage向另外一個線程窗口發message,本來以為他會一直block住,但是他卻調用了另外一個消息的處理程序,導致了行為不正確。所以一定要小心使用SendMessage發給其他線程的窗口。

我修改了一下,把
pWnd->SendMessage(MSG_LOG_MESSAGE, nMsgType, (LPARAM)(LPCTSTR)m_cstrMessage);
改成了
HWND hWnd = pWnd->GetSafeHwnd();
::SendMessageTimeout(hWnd,MSG_LOG_MESSAGE, nMsgType, (LPARAM)(LPCTSTR)m_cstrMessage,SMTO_BLOCK,15000,0);
解決了這個bug.

posted @ 2006-07-21 09:50 小明 閱讀(10410) | 評論 (5)編輯 收藏

     摘要: 介紹兩個用于C/C++/Java格式化的工具  閱讀全文

posted @ 2006-07-14 16:32 小明 閱讀(6373) | 評論 (3)編輯 收藏

     摘要: 使用標準庫應該記住的一些東西(21條)  閱讀全文

posted @ 2006-07-12 11:19 小明 閱讀(5704) | 評論 (14)編輯 收藏

在linux/Unix平臺上面做G11N的開發,大抵都會用到gettext庫/工具集( ftp://ftp.gnu.org/gnu/gettext/ ) 和libiconv(http://www.gnu.org/software/libiconv/) ,前者是用于實現Resource bundle,而后者用于各種編碼轉化。

(注:這里沒有考慮cross-platform)


1. 實現方法

a . 使用po文件作為資源文件 (建議編碼是utf-8)
    一方面因為UTF-8兼容ANSI,另外一方面考慮到G11N的程序大部分使用utf-8輸出,比如輸出到database,web UI, file等等。

b. 使用getext從resource file ( mo文件)讀到相應的L10N resource文件
   注意這里需要先setlocale來設置locale
#include <stdio.h>
#include 
<locale.h>
#include 
<libintl.h>

#define _(string) gettext (string)

int main(int argc, char **argv)
{
    
if (setlocale(LC_ALL, “”) == NULL) {
        fprintf(stderr, “setlocale() error.\n”);
        
return -1;
}
if (bindtextdomain(package, “/usr/share/locale”) == NULL) {
    fprintf(stderr, “bindtextdomain() error.\n”);
    
return –1;
}
    
if (textdomain(package) == NULL) {
        fprintf(stderr, “textdomain() error.\n”);
        
return –1;
}
    printf(“
%s\n”, _(“Hello, world!”));
    
return 0;
}


c.如果要輸出到控制臺(console),因為不是console都支持unicode output,所以推薦的方法是首先是把utf-8轉化為本地編碼,然后使用printf輸出。不推薦使用wprintf進行輸出,一方面是因為wchar_t的大小隨編譯器不同,不好控制。另外一方面,很多wprintf的實現也都是先把wchar_t[]轉為本地編碼,然后輸出。轉化編碼使用libconv

d.如果要輸出到web pages,database,file,編碼推薦使用utf-8.

e.如果要輸出本地化的日期和時間,使用API: strftime
#include <stdio.h>
#include 
<time.h>
int main(int argc, char **argv) 
{
    time_t t;
    
struct tm *ptm;
    
char buffer[100];

    memset(buffer, 
0sizeof(buffer));
    
if (time(&t) < 0) {
        fprintf(stderr, “time() error: 
%m\n”);
    }
    
if ((ptm = localtime(&t)) == NULL) {
        fprintf(stderr, “localtime() error: 
%m\n”);
    }
    strftime(buffer, 
sizeof(buffer), “%%X”, ptm);
    printf(“
%s\n”, buffer);
    
return 0;
}


f. 如果要輸出本地化的數字和貨幣,使用API: strfmon
#include <stdio.h>
#include 
<monetary.h>

int main(int argc, char **argv)
{
    
char buffer[100];
    strfmon(buffer, 
sizeof(buffer), “%=*i", 12345.67);
    printf(“%s\n”, buffer);
    
return 0;
}


2.目錄結構
/product
  /i18n
      /zh_TW
          your.mo
      /ja_JP 
          your.mo

posted @ 2006-06-26 16:57 小明 閱讀(1511) | 評論 (0)編輯 收藏

1. printf 只能提供ANSI/MB 的輸出,不支持輸出unicode stream.
例如:
wchar_t?test[]=L"測試1234";
printf(
"%s",test);
是不會正確輸出的


2.wprintf 同樣不會提供unicode output,
?? 但是他會把wchar_t的string轉為locale的SB/MB字符編碼,然后輸出
例如:
wchar_t?test[]?=?L"測試Test";
wprintf(L
"%s",test);
會輸出??1234之類的字符串,或者不輸出任何結果
因為wprintf沒有辦法把L"測試Test"轉為默認的ANSI,需要設置locale
setlocale(LC_ALL,"chs");
wchar_t?test[]?
=?L"測試Test";
wprintf(L
"%s",test);
會有正確的輸出
等同于printf("%ls",test);

綜上:? CRT I/O functions do not provide Unicode output.

3. Window console自從NT4就是一個真正的unicode console
不過輸出unicode string,只有使用Windows API, WriteConsoleW
例如:
wchar_t?test[]?=?L"測試1234";
DWORD?ws;
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),test,wcslen(test),
&ws,NULL);
可以正確的輸出而不需要設置locale,因為是真正的unicode的輸出,跟codepage無關

4. 如何實現跨平臺的console output
??? 不要使用wchar_t和wprintf,因為這些都依賴于編譯器.
???? ICU是IBM的一個成熟的跨平臺支持unicode的libary,推薦使用

以下是ICU的uprintf實現

void?uprintf(const?UnicodeString?&str)?{
????
char?*buf?=?0;
????int32_t?len?
=?str.length();
????int32_t?bufLen?
=?len?+?16;
????int32_t?actualLen;
????buf?
=?new?char[bufLen?+?1];
????actualLen?
=?str.extract(0,?len,?buf/*,?bufLen*/);?//?Default?codepage?conversion
????buf[actualLen]?=?0;
????printf(
"%s",?buf);
????delete?buf;
}
它也是先把Unicode string轉化為本地的codepage,然后printf,雖然也不是unicode output,但是跨平臺,大多數情況會工作得很好。

posted @ 2006-06-21 11:53 小明 閱讀(18438) | 評論 (5)編輯 收藏

     摘要: Globalization development   閱讀全文

posted @ 2006-06-19 19:45 小明 閱讀(1662) | 評論 (1)編輯 收藏

很久以前寫的五子棋代碼(Use MFC),支持人機對戰,發上來玩玩

source:?? http://www.shnenglu.com/Files/sandy/Five_src.rar

bin: ? http://www.shnenglu.com/Files/sandy/Five_bin.rar


picture:

chess.jpg

posted @ 2006-05-12 16:19 小明 閱讀(1727) | 評論 (2)編輯 收藏

在windows的世界里面,很少有API沒有返回值。但是到底返回什么代表成功,這個沒有標準。我發現主要有三種模式

1 . 返回非0表示成功,返回0表示失敗

大多數Win32 Platform API都是這樣,比如

int?result?=MoveFileEx(szTempName,?
????????????????????
"allcaps.txt",?
????????????????????MOVEFILE_REPLACE_EXISTING);

if(!result)
????{?
????????printf(
"Could?not?move?file.?error:%d",GetLastError());
????????
return?0;
????}

使用這種方法。你必須提供類似GetLastError的取錯誤的方法,而且你必須保證這個函數是thread-safe的,每個線程能維護自己的錯誤信息。

2. 返回大于等于0表示成功,返回-1表示失敗
socket api大部分是這樣設計的

while(?bytesRecv?!=?SOCKET_ERROR?)?{
????bytesRecv?
=?recv(?ConnectSocket,?recvbuf,?32,?0?);
????
if?(?bytesRecv?==?0?||?bytesRecv?==?WSAECONNRESET?)?{
??????printf(?
"Connection?Closed.\n");
??????
break;
????}
????printf(?
"Bytes?Recv:?%ld\n",?bytesRecv?);
??}

這樣的好處是返回值就可以用來表示成功和狀態。比如這里的recv就可以返回收到的字節數。但是你還是要有一個查詢錯誤的API,like WSAGetLastError().

3.返回0表示成功

COM的接口大部分是這樣設計的
if(?FAILED(lpdd->QueryInterface(IID_IDirectDraw7,?(LPVOID?*)?&lpdd)))
????{
??????????
//error?handle?and?return
????}





其他的一些考慮

1.如何定義錯誤值?
簡單的一點使用宏連續定義,like
#define?E_NO_FILE?1
#define?E_BAD_FILE?2
復雜的一點就像COM,嚴格的定義每一位的意義
這種情況下你可以提供一個宏來創建錯誤代碼,like
#define?MAKE_HRESULT(sev,fac,code)\

(?(HRESULT)?(((unsigned?
long)(sev)<<31)?|?((unsigned?long)(fac)<<16)?\

|?((unsigned?long)(code)))?)

2.可以提供一個宏或者函數來幫助判斷是否成功
比如COM提供了FAILED宏來幫助你判斷COM的返回值
#define?FAILED(Status)?????((HRESULT)(Status)<0)

3.如果只有錯誤和成功兩個返回值,考慮使用bool來返回
這個適用于C++,優點是意義很清晰.返回 true就是成功,false就是失敗.

4.要使用異常來表示錯誤的狀態么?
使用異常的好處就是返回值被省出來了,可以不返回或者返回其他信息,還有益于定義錯誤類型和簡化程序流程。缺點就是C++對異常支持還不夠好,沒有finally,每一家編譯器支持也不一樣,實現可能大不同.

posted @ 2006-04-25 16:55 小明 閱讀(2427) | 評論 (2)編輯 收藏

#include? < stdio.h >

int ?main()
{
????
int ?a = 10 ,b = 20 ;

????a
= (a + b) - (b = a);

????printf(
" a=%d,b=%d\n " ,a,b);
????
????
return ? 0 ;
}

很簡單,交換a和b的值

在debug模式下,輸出
a=20,b=10

在release模式下,輸出
a=10,b=10

I think there is a bug in release version.

posted @ 2006-04-24 18:08 小明 閱讀(2040) | 評論 (21)編輯 收藏

最近在使用金山詞霸2005,由于金山詞霸2005在啟動的時候會發一個UDP包到局域網,然后檢測是否有相同序列號的金山詞霸,如果發現則要求退出。甚為無奈。windows 2000自帶有防火墻的功能,但是只有Permit all 和 Permit only兩種模式,居然沒有Deny only,奇怪。

所以我就查了一下MSDN,發現有Routing and Remote Access Service一類的API可以用。
于是程序的流程就是這樣
1.設置臨時防火墻,以阻擋發到端口11113的UDP包
2.啟動金山詞霸
3.刪除設置

代碼:


#include?
<stdlib.h>
#include?
<Iphlpapi.h>
#include?
<Fltdefs.h>

#pragma?comment(lib,?
"Iphlpapi.lib")

const?int?XDICT_PORT?=?11113;

unsigned?
long?CharToIp(const?char?*sIp)
{
????
int?octets[4];
????
int?i;
????
const?char?*?auxCad?=?sIp;
????unsigned?
long?lIp?=?0;
????
????
//we?extract?each?octet?of?the?ip?address
????
//atoi?will?get?characters?until?it?found?a?non?numeric?character(in?our?case?'.')
????for(i?=?0;?i?<?4;?i++)
????{
????????octets[i]?
=?atoi(auxCad);

????????
if(octets[i]?<?0?||?octets[i]?>?255)
????????????
return?0;

????????lIp?
|=?(octets[i]?<<?(i*8));

????????
//update?auxCad?to?point?to?the?next?octet
????????auxCad?=?strchr(auxCad,?'.');

????????
if(auxCad?==?NULL?&&?i!=3)
????????????
return?-1;

????????auxCad
++;
????}
????
return?lIp;
}

int?APIENTRY?WinMain(HINSTANCE?hInstance,
?????????????????????HINSTANCE?hPrevInstance,
?????????????????????LPSTR?????lpCmdLine,
?????????????????????
int???????nCmdShow)
{
????
//first?get?adapter?info
????PIP_ADAPTER_INFO?pAdapterInfo?=?NULL,tmp;
????unsigned?
long?len?=?0;
?????GetAdaptersInfo(pAdapterInfo,
&len);
????pAdapterInfo?
=?(PIP_ADAPTER_INFO)?malloc?(len);
????DWORD?result?
=?GetAdaptersInfo(pAdapterInfo,?&len);
????
if(result!=ERROR_SUCCESS)
????{
????????MessageBox(NULL,
"Fail?to?call?GetAdaptersInfo","ERROR",MB_OK);
????????
return?-1;
????}

????
//create?filters?interface
????INTERFACE_HANDLE?hInterface?=?NULL;
????result?
=?PfCreateInterface(0,PF_ACTION_FORWARD,PF_ACTION_FORWARD,FALSE,TRUE,&hInterface);
????
if(result!=NO_ERROR)
????{
????????MessageBox(NULL,
"Fail?to?call?PfCreateInterface","ERROR",MB_OK);
????????
return?-1;
????}

????
//add?the?filter?to?adapter
????unsigned?long?dmp?=?0;
????PF_FILTER_DESCRIPTOR?ipFlt;
????ipFlt.dwFilterFlags?????
=?0;
????ipFlt.dwRule????????????
=?0;
????ipFlt.pfatType??????????
=?PF_IPV4;
????ipFlt.dwProtocol????????
=?FILTER_PROTO_UDP;
????ipFlt.fLateBound????????
=?0;
????ipFlt.wSrcPort??????????
=?0;
????ipFlt.wSrcPortHighRange?
=?0;
????ipFlt.wDstPort??????????
=?XDICT_PORT;
????ipFlt.wDstPortHighRange?
=?XDICT_PORT;
????ipFlt.SrcAddr?
=?(PBYTE)&dmp?;
????ipFlt.SrcMask?
=?(PBYTE)&dmp;
????ipFlt.DstAddr?
=?(PBYTE)&dmp;
????ipFlt.DstMask?
=?(PBYTE)&dmp;

????
//bind
????IP_ADDR_STRING?*localIp;
????
for(tmp=pAdapterInfo;tmp?!=?NULL;tmp=tmp->Next)
????{
????????????
//?each?ip?of?a?adapter
????????????for(localIp=&tmp->IpAddressList;localIp!=NULL;localIp=localIp->Next)
????????????{
????????????????unsigned?
long?ul?=?CharToIp(localIp->IpAddress.String);
????????????????PBYTE?lIp?
=?(PBYTE)&ul;
????????????????PfBindInterfaceToIPAddress(hInterface,?PF_IPV4,?lIp);
????????????}
????}

????result?
=?PfAddFiltersToInterface(hInterface,1,&ipFlt,1,&ipFlt,NULL);
????
if(result!=NO_ERROR)
????{
????????MessageBox(NULL,
"Fail?to?call?PfAddFiltersToInterface","ERROR",MB_OK);
????????
return?-1;
????}

????
//start?XDict
????STARTUPINFO?si;
????PROCESS_INFORMATION?pi;
????ZeroMemory(?
&si,?sizeof(si)?);
????si.cb?
=?sizeof(si);
????ZeroMemory(?
&pi,?sizeof(pi)?);
????::CreateProcess(NULL,
"XDICT.exe",
????????NULL,?????????????
//?Process?handle?not?inheritable.?
????????NULL,?????????????//?Thread?handle?not?inheritable.?
????????FALSE,????????????//?Set?handle?inheritance?to?FALSE.?
????????0,????????????????//?No?creation?flags.?
????????NULL,?????????????//?Use?parent's?environment?block.?
????????NULL,?????????????//?Use?parent's?starting?directory.?
????????&si,??????????????//?Pointer?to?STARTUPINFO?structure.
????????&pi?);????????????//?Pointer?to?PROCESS_INFORMATION?structure.

????
//?Wait?until?child?process?exits.
????WaitForSingleObject(?pi.hProcess,?INFINITE?);
????
//?Close?process?and?thread?handles.?
????CloseHandle(?pi.hProcess?);
????CloseHandle(?pi.hThread?);


????
//remove?filter
????for(tmp=pAdapterInfo;tmp?!=?NULL;tmp=tmp->Next)
????{
????????result?
=?PfRemoveFiltersFromInterface(hInterface,1,&ipFlt,1,&ipFlt);
????????
if(result!=NO_ERROR)
????????{
????????????MessageBox(NULL,
"Fail?to?call?PfRemoveFiltersFromInterface","ERROR",MB_OK);
????????????
return?-1;
????????}
????}
????PfUnBindInterface(hInterface);?
????PfDeleteInterface(hInterface);

????
//free
????free(pAdapterInfo);
????
return?0;
}

使用的API有
GetAdapaterInfo --- 取得網卡的信息,如ip
PfCreateInterface ----Create一個Filter Interface
PfBindInterfaceToIPAddress ----綁定Filter Interface到IP
PfAddFiltersToInterface ----增加Filter到Interface
PfRemoveFiltersFromInterface ---Remove Filter
PfUnBindInterface---取消綁定到ip
PfDeleteInterface---刪除Filter Interface


附上可執行文件: http://www.shnenglu.com/Files/sandy/XDictWrapper.zip
使用的時候解壓放在金山詞霸同一個目錄就可以了,然后通過這個程序來啟動金山詞霸。

posted @ 2006-04-19 16:53 小明 閱讀(3825) | 評論 (6)編輯 收藏

僅列出標題
共4頁: 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>
            亚洲精品免费看| 亚洲国产成人精品女人久久久 | 怡红院精品视频在线观看极品| 亚洲欧美精品伊人久久| 一区二区三区精品久久久| 欧美视频福利| 亚洲欧美日韩国产综合| 亚洲综合三区| 黄色日韩网站| 欧美激情第五页| 欧美黑人国产人伦爽爽爽| 一区二区欧美国产| 亚洲在线观看免费视频| 狠狠色综合日日| 亚洲福利在线看| 欧美另类99xxxxx| 中国日韩欧美久久久久久久久| 一区二区三区四区蜜桃| 国产精品一区二区久久精品| 久久精彩免费视频| 欧美freesex8一10精品| 亚洲视频导航| 久久国产精品久久久久久| 亚洲人成在线观看一区二区| 亚洲手机视频| 在线电影一区| 一本色道久久综合亚洲精品婷婷| 国产精品羞羞答答| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美伦理91| 欧美中文在线观看国产| 欧美 亚欧 日韩视频在线| 亚洲欧美精品一区| 模特精品裸拍一区| 欧美在线精品免播放器视频| 欧美精品久久久久a| 久久免费视频在线| 欧美午夜精品久久久久久久| 免费视频亚洲| 国产日韩亚洲欧美| 亚洲激情欧美激情| 国内揄拍国内精品久久| 一区二区国产精品| 亚洲精品一区二区三区av| 欧美在线91| 午夜一区二区三视频在线观看| 久久免费观看视频| 欧美自拍偷拍| 欧美视频一区二区三区…| 亚洲国产美女久久久久| 精品91免费| 先锋影音国产一区| 亚洲一线二线三线久久久| 欧美国产日韩一区| 暖暖成人免费视频| 国语精品中文字幕| 午夜日韩激情| 欧美一区二区在线| 国产精品大全| 亚洲特级片在线| 一区二区三区四区五区在线| 欧美成人四级电影| 亚洲黄色成人久久久| 激情视频一区二区| 久久精品国产第一区二区三区最新章节 | 国产精品久久久久久久久久免费 | 另类春色校园亚洲| 国产一区成人| 亚洲欧美在线网| 亚洲欧美日本日韩| 欧美午夜片在线观看| 欧美电影打屁股sp| 亚洲国内在线| 欧美二区乱c少妇| 欧美成人免费播放| 亚洲精品一区在线观看香蕉| 欧美mv日韩mv亚洲| 亚洲欧洲一区二区三区久久| 激情成人在线视频| 一区二区三区国产盗摄| 欧美人在线观看| 亚洲三级免费观看| 亚洲一区二区毛片| 国产麻豆一精品一av一免费| 亚洲欧美中文在线视频| 久久视频这里只有精品| 亚洲国产高清自拍| 欧美激情第3页| 一区二区三区黄色| 欧美中文字幕在线播放| 国内精品嫩模av私拍在线观看 | 亚洲日本va在线观看| 夜夜爽夜夜爽精品视频| 国产精品免费观看在线| 久久精品视频99| 亚洲精品在线观看免费| 性欧美大战久久久久久久久| 伊人男人综合视频网| 欧美韩国日本一区| 亚洲在线一区二区三区| 久久伊人免费视频| 一本色道久久综合亚洲二区三区 | 欧美日韩精品伦理作品在线免费观看| 一区二区不卡在线视频 午夜欧美不卡' | 欧美成人一区二区三区片免费 | 久久九九国产精品怡红院| 亚洲激情婷婷| 国产精品一区二区三区免费观看| 久久精品国产综合精品| 亚洲激情电影中文字幕| 久久成人人人人精品欧| 日韩一级黄色av| 国产一区亚洲| 欧美日韩一区自拍| 久久男女视频| 亚洲欧美精品中文字幕在线| 亚洲国产毛片完整版| 久久婷婷激情| 亚洲欧美国产日韩中文字幕| 亚洲韩国一区二区三区| 国产嫩草一区二区三区在线观看| 麻豆国产va免费精品高清在线| 亚洲制服丝袜在线| 夜夜嗨av一区二区三区中文字幕 | 性伦欧美刺激片在线观看| 亚洲高清在线观看| 欧美专区亚洲专区| 亚洲综合导航| 亚洲美女毛片| 伊人久久综合| 国内精品久久久久影院色| 国产精品白丝jk黑袜喷水| 欧美va天堂| 久久久久久久一区| 欧美一区二区在线视频| 亚洲欧美成人在线| 亚洲一区二区三区免费视频| 亚洲伦理在线免费看| 国产一区二区成人| 国产精品日韩久久久| 欧美视频第二页| 欧美日韩一区高清| 欧美日韩国产一级| 欧美精品自拍| 欧美高清在线视频| 欧美mv日韩mv国产网站app| 久久久亚洲综合| 久久婷婷国产综合尤物精品| 欧美在线看片a免费观看| 欧美一区二区三区免费观看视频| 亚洲欧美国内爽妇网| 亚洲一区欧美一区| 亚洲欧美日韩一区二区三区在线观看| 一本高清dvd不卡在线观看| 亚洲精品在线观| 正在播放欧美视频| 亚洲图片欧美一区| 亚洲欧美网站| 久久精品国产2020观看福利| 久久久国产午夜精品| 久久综合久久久| 欧美国产日韩在线观看| 欧美日韩一区国产| 国产精品爽黄69| 国产色产综合产在线视频| 国产一区二区丝袜高跟鞋图片| 很黄很黄激情成人| 91久久线看在观草草青青| 欧美一级成年大片在线观看| 小处雏高清一区二区三区| 欧美 亚欧 日韩视频在线| 欧美高清在线视频| 国产精品v亚洲精品v日韩精品 | 久久精品99无色码中文字幕| 老色批av在线精品| 欧美视频中文一区二区三区在线观看 | 中文一区二区| 久久久精彩视频| 欧美精品一区二区三区在线看午夜 | 欧美日韩成人免费| 国产精品视频九色porn| 亚洲福利在线视频| 亚洲一区二区在线观看视频| 久久久国产午夜精品| 亚洲激情一区二区| 亚洲一区免费视频| 欧美成人四级电影| 国产一区二区三区久久精品| 亚洲精品乱码久久久久久蜜桃91| 亚洲影院色在线观看免费| 欧美xxx成人| 亚洲伊人伊色伊影伊综合网| 理论片一区二区在线| 国产毛片一区二区| 99精品国产一区二区青青牛奶| 久久国产天堂福利天堂| 亚洲日本在线观看| 久久久999国产| 国产精品欧美在线| 亚洲免费高清视频|