<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JUST DO IT ~

    我只想當個程序員

         摘要:   閱讀全文
    posted @ 2013-10-21 11:10 小高 閱讀(287) | 評論 (0)編輯 收藏

     

    目標緩沖區 小于 實際緩沖區

     

    char *name = "1234567890";
    char name2[6]={0};

    memcpy_s( name2 ,  sizeof(name2) ,  name, strlen(name));

    動態執行失敗 (DEBUG ASSERTION FAILED !) 運行庫和調試庫都會提示出錯.

     

    注意:    指針sizeof( 指針 ) = 4  

    strncpy(name2,name ,sizeof(name) );             打印name2  1234 

     

    strncpy(name2,name ,strlen(name) );            打印name2   123456IOIPNUUY

    優化這個語句,盡量拷貝內容

    strncpy(name2,name ,   strlen(name)>sizeof(name2)? sizeof(name2): strlen(name)   );

     

     

    目標緩沖區 小于 實際緩沖區

    strncpy(name2,name ,sizeof(name2)-1 );

    sizeof(name2)-1 ------------>讓最后一個name2字符留給\0 否則這個字符也被拷貝了.

     

     

     

    看一下LINUX下的兩個函數的源代碼,印象會更加深刻一些
    void * memcpy(void * dest,const void *src,size_t count)
    {
        char *tmp = (char *) dest, *s = (char *) src;
        while (count--)
            *tmp++ = *s++;
        return dest;
    }
    char * strcpy(char * dest,const char *src)
    {
        char *tmp = dest;
        while ((*dest++ = *src++) != '\0')
            /* nothing */;
        return tmp;
    }
    老實講,這兩個函數長得是很帥

     

     

    參考

    http://stackoverflow.com/questions/4593907/difference-between-strncpy-and-memcpy

     

    http://www.cppblog.com/Tim/archive/2011/04/02/143259.aspx

    posted @ 2013-09-18 00:12 小高 閱讀(462) | 評論 (0)編輯 收藏

     

    Visual Studio 2008 命令提示

    cl /EHsc simple.cpp

     

    參考:

    http://msdn.microsoft.com/zh-cn/library/ms235639(v=vs.90).aspx 

    http://msdn.microsoft.com/zh-cn/library/1370z17c.aspx

     

     

     

    Visual C++ 示例應用程序

    Visual Studio 2008

    其他版本


    通用示例

    包含一些示例,這些示例可以在 Visual C++ 的所有版本(包括 Visual C++ 速成版)中使用。

    Visual C++ 2008 中的演練

    包含一些演練鏈接,這些演練重點演示了 Visual C++ 的功能。

    STL 示例

    包含演示標準模板庫功能的一些示例。

    ATL 示例

    包含演示活動模板庫 (ATL) 功能的一些示例。

    編譯器 COM 支持示例

    包含一些示例,這些示例演示 Visual C++ 編譯器對 COM 的內置支持。

    自定義向導示例

    包含一些示例,這些示例說明如何創建您自己的向導來優化與創建自定義應用程序或添加代碼相關的任務。

    事件處理示例

    包含一些示例,這些示例演示 Visual C++ 中的事件處理。

    擴展性

    包含一些示例,這些示例演示如何擴展 Visual Studio 和 Visual C++。

    國際示例

    包含一些示例,這些示例演示如何針對國際市場編寫代碼。

    互操作性示例

    包含一些示例,這些示例演示 COM 和 .NET Framework 之間的互操作性。

    MASM 示例

    包含一些示例,這些示例演示 Visual C++ 中的 Microsoft Macro Assembler (MASM) 源文件支持。

    MFC 示例

    包含一些示例,這些示例演示 Microsoft 基礎類 (MFC) 功能。

    Windows SDK 示例

    包含一個示例,此示例演示 Windows 圖像獲取 (WIA) 應用程序編程接口 (API)。

     

     

    互操作性示例

    http://msdn.microsoft.com/zh-cn/library/wd6032c3.aspx

     

    標準模板庫示例

    http://msdn.microsoft.com/zh-cn/library/f1dtts6s.aspx

    posted @ 2013-09-15 00:27 小高 閱讀(747) | 評論 (0)編輯 收藏

     

    warning MSB8012: TargetPath(C:\dev\APPFF_SQ2\APP\.\Release\APP_SQ1.exe) 與 Linker 的 OutputFile 屬性值(C:\dev\APPFF_SQ2\APP\Release\MDU2FF_SQ.exe)不匹配。這可能導致項目生成不正確。若要更正此問題,請確保 $(OutDir)、$(TargetName) 和 $(TargetExt) 屬性值與 %(Link.OutputFile) 中指定的值匹配。

    warning MSB8012: TargetName(MDU2FF_SQ1) 與 Linker 的 OutputFile 屬性值(MDU2FF_SQ)不匹配。這可能導致項目生成不正確。若要更正此問題,請確保 $(OutDir)、$(TargetName) 和 $(TargetExt) 屬性值與 %(Link.OutputFile) 中指定的值匹配。
    1>  MD .vcxproj -> C:\dev\APPFF_SQ2\APP\.\Release\ .exe

     

    project name 修改名字.

    另外工程配置,鏈接生成--->輸出文件統一.

    posted @ 2013-09-12 14:51 小高 閱讀(1290) | 評論 (0)編輯 收藏
    posted @ 2013-09-12 14:09 小高 閱讀(311) | 評論 (0)編輯 收藏
         摘要:   一般來說,如果你不是MFC工程,需要引用HANDLE的話, 最好自己將其類型改為void*,比如,你本來變量的類型為HANDLE, 你把它改為void*就可以了。   --------------------------------------------------------------------------------    ...  閱讀全文
    posted @ 2013-09-10 14:14 小高 閱讀(535) | 評論 (0)編輯 收藏

    1、工作空間默認
     
    Windows -> Preferrences -> C/C++ -> Editor -> Documentation tool comments
     
    默認為none,修改為Doxygen即可
     
    2、工程特別屬性
    如果不想設置為整個工作空間的默認屬性,可以在工作屬性對話框的這里找到:
     
    Project -> Properties -> C/C++ General -> Enable project specific settings
     
    選擇Doxygen即可
     
    備忘

    posted @ 2013-09-10 14:03 小高 閱讀(269) | 評論 (0)編輯 收藏

    發生在析夠函數中,   vs2010 debug 模式 .

    CriticalSection::~CriticalSection(void){
        DeleteCriticalSection(&m_CritSect); 
    }

     

    我開始推測,必須退出section才能delete ?

        InitializeCriticalSection(&m_CritSect);  
          EnterCriticalSection(&m_CritSect); 
        DeleteCriticalSection(&m_CritSect);   
      實際上這樣退出是可以的.

     

    問題在哪里? 

    一個回調處理函數類注冊到另外一個線程里面.另外一個線程一直有消息推送或者調用其內部函數.

     

    ~主類(){

           aa->release(); //之前沒有這句話 ,內部aa 線程一直在運行 ,可能是排在析構 (DeleteCriticalSection)之后或者之前,損壞了這個變量 m_CritSect

    }

    這里開始調用  DeleteCriticalSection(&m_CritSect);   并且報錯了.

    posted @ 2013-09-10 13:28 小高 閱讀(468) | 評論 (0)編輯 收藏

    別的項目里面拿來的 .h .cpp 

    因為本項目未使用預編譯頭.

    但是預編譯頭這個頭文件存在,里面東西很多.

    導致很多宏  或者 常量重復定義.

    posted @ 2013-09-09 23:34 小高 閱讀(267) | 評論 (0)編輯 收藏
    定義成標準頭
    int main(int argc, char *argv[])
    argv[i]
    非標準
    int main() {
        PWSTR cmdLine = GetCommandLineW();
    
        int argc;
        PWSTR *argv = CommandLineToArgvW(cmdLine, &argc);
    }

     

     

    //參數使用

    if (argc==3)
    {
        if (strcmp(argv[0], "-e")==0)
        {
            iMode = 1;
        } 
        else if (strcmp(argv[0], "-d")==0)
        {
            iMode =2;
        }
        sInput=argv[1];
        sOutput=argv[2];
    }

    _tmain 
    Unicode下就是wmain
    否則就是main

     

    [參考]

    http://stackoverflow.com/questions/16706632/c-tchar-to-stdstring

    posted @ 2013-09-04 16:07 小高 閱讀(241) | 評論 (0)編輯 收藏

    我老是搞錯.

     

    boy.h

    class Boy

     

    boy.cpp

    Boy  g_boy;

     

    使用全局變量

    Collection.h

    #include “boy.h”

    extern Boy g_boy;

     

    似乎更優雅的方式

    #ifdef  _BOY__HH__
    extern  Boy  g_boy ;
    #endif

     

     

    錯誤方式:    定義宏根本解決不了這個問題

    boy.h
    #pragma once
    #ifndef _BOY__HH__
    #define _BOY__HH__ 

    class  boy

    Boy  g_boy;

    #endif

    編譯錯誤

    1> .obj : error LNK2005: "class class 全局變量名 " (?g_CITSCache@@3VMarketCache@@A) 已經在 XXX.obj 中定義
    1>  正在生成非 SAFESEH 映像。
    1>D:\XXX.exe : fatal error LNK1169: 找到一個或多個多重定義的符號

     

    等我看了編譯原理再來解釋.

     

    如何防止循環引用?

    A->b->c->A

    posted @ 2013-09-04 09:35 小高 閱讀(330) | 評論 (0)編輯 收藏

    一直報錯,說找不到引用.

    2>Quote.obj : error LNK2019: 無法解析的外部符號 "public: __thiscall 某類::某類(char *)" (??0某類@@QAE@PAD@Z),該符號在函數 "public: __thiscall Quote::Quote(void)" (??0Quote@@QAE@XZ) 中被引用
    2>Quote.obj : error LNK2001: 無法解析的外部符號 "public: virtual bool __thiscall 某類::Init(void)" (?Init@某類@@UAE_NXZ)
    2>Quote.obj : error LNK2001: 無法解析的外部符號 "public: virtual void __thiscall 某類::Kill(void)" (?Kill@某類@@UAEXXZ)
    2>Quote.obj : error LNK2001: 無法解析的外部符號 "private: virtual int __thiscall 某類::Run(void)" (?Run@某類@@EAEHXZ)
    2>Quote.obj : error LNK2001: 無法解析的外部符號 "private: virtual bool __thiscall 某類::Terminate(void)" (?Terminate@某類@@EAE_NXZ)
    2>Quote.obj : error LNK2019: 無法解析的外部符號 "public: virtual __thiscall 某類::~某類(void)" (??1CW

    1.使用編譯---------> verbose  顯示能找到庫.

    9C[Z)A4`[NZT4PM_%[[$2HB

    2.可以看到那個方法連接到那個庫文件里面的.

    ZH1IBN68EZ@~YHRA@]$EQ61

    3.通過depends  看這個dll暴露出來的方法.

    C}$1@WQ~CKP%KDAQ9GYSLCK

     

     

     

    #ifdef EXPORT_API
    #define MY_API __declspec(dllexport)
    #else
    #define MY_API __declspec(dllimport)
    #endif
    
    class MY_API MyClass {
       ...
    };

     

    #include <e://testClass.h>

    #pragma comment(lib, "//Debug//ServerDLL.lib")

     

     

    參考

    http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL

     

    http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.html

    posted @ 2013-09-03 10:15 小高 閱讀(527) | 評論 (0)編輯 收藏

     

    ****取資源

     

          業務代碼?

         

    ***釋放資源

    posted @ 2013-09-02 20:47 小高 閱讀(295) | 評論 (0)編輯 收藏

    回頭慢慢看.

     

     

     

    http://stackoverflow.com/questions/1008019/c-singleton-design-pattern

     

    http://blog.yangyubo.com/2009/06/04/best-cpp-singleton-pattern/#id15

     

    http://yunli.blog.51cto.com/831344/758684

     

    CMake - 優秀的 C/C++ 構建系統

    http://blog.yangyubo.com/2008/05/07/cmake-excellent-buildsys/

     

    揭示C++中全局類變量的構造與析構順序

    http://yunli.blog.51cto.com/831344/636281

     

    http://www.cppblog.com/dyj057/archive/2005/09/20/346.html

    posted @ 2013-08-28 13:29 小高 閱讀(208) | 評論 (0)編輯 收藏

     

     

      SetBlockMode(false);  // NONBLOCK mode      
     e = connect(m_socket, (struct sockaddr*)&addr, sizeof (addr));  
     if (e<0)       {      
     e = GET_LAST_SOCK_ERROR();  printf(" socket error code = %d \n",e);       
     if ((e==EWOULDBLOCK||e==EINPROGRESS || e == WSAEWOULDBLOCK ) && CheckSendAvailable(waitms)>0)    
     {             e = 0; // 表示連接成功      
      }  
    else   {  
               e = -1; // 表示連接失敗,或者在等待的時間之內連接失敗          }
     
    我臨時修改。
             if ((e==EWOULDBLOCK||e==EINPROGRESS || e == WSAEWOULDBLOCK ) && CheckSendAvailable(waitms)>0)
    
     
    WSAEWOULDBLOCK  = 10037 
     
     
     
    問題找到了。
    切換到項目配置。平臺工具集---->vs2008   連接win sdk 6的庫
    切換到項目配置。平臺工具集---->vs2012 連接win  sdk  8 的庫
    有區別。
     
     

    E6~A%]$`JD$GI9K]TY[MO~Q

     

    正在生成代碼...
    1>  Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1> 
    1>  Copyright (C) Microsoft Corporation.  All rights reserved.
    1> 
    1> 
    1> 
    1>  正在搜索庫
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
    1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:
    1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
    1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\libcpmtd.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
    1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:
    1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
    1>      正在搜索 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\libcpmtd.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ws2_32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbc32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\odbccp32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\kernel32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\user32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\gdi32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\winspool.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\comdlg32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\advapi32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\shell32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\ole32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\oleaut32.lib:
    1>      正在搜索 C:\Program Files\\Microsoft SDKs\Windows\v6.0A\lib\uuid.lib:
    1> 
    1>  已完成庫搜索
    1>  Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1> 
    1>  Copyright (C) Microsoft Corporation.  All rights reserved.
    1> 
    1> 
    1>  MDUSJS.vcxproj -> D:\dev\cmd3\cmdsiimdsi\MDUSJS2012\.\Debug\MDUSJS.exe
    ========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========

     

    平臺工具 連接的庫不一樣。

     

    Q__${K)0%R54TA9X8E8EUQJ

     


    >  正在生成代碼...
    1>dbf.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/SAFESEH”規范)
    1> 
    1>  正在搜索庫
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
    1> 
    1>  已完成庫搜索
    1> 
    1>  正在搜索庫
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\LIBCMTD.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\OLDNAMES.lib:
    1>      正在搜索 D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcpmtd.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ws2_32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbc32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\odbccp32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\kernel32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\winspool.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\comdlg32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\advapi32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\shell32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\ole32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\oleaut32.lib:
    1>      正在搜索 C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\uuid.lib:
    1> 
    1>  已完成庫搜索
    1>  MDUSJS.vcxproj -> D:\dev\cmd3\cmdsiimdsi\MDUSJS2012\.\Debug\MDUSJS.exe
    ========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========

     

     

     

     

     

     

     
     
     

    參考:

    ms connect

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625(v=vs.85).aspx

     

    ioctlsocket function 控制柱塞非柱塞

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms738573(v=vs.85).aspx

     

    TCP/IP編程基礎——超時、多路復用、非阻塞

     

     

    http://blog.csdn.net/s3olo/article/details/8014872

     

     

     

    http://developerweb.net/viewtopic.php?id=7246

     

     

    代碼 windows  tcp 通過select方式實現 connect non block

    http://bbs.csdn.net/topics/10426810

     

     

     

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx

    Windows Sockets Error Codes

     

    ***************

    測試模擬工具發送大數據量消息時,發現時而發送成功,時而失敗。追蹤代碼發現,拋出的是一個錯誤碼為10035的socket錯誤。上網查資料發現這個錯誤碼描述是Service temporarily unavailable.也就是說有可能send的時候遇到socket緩沖區滿,無法寫入,引起發送失敗。

      如果是這樣的話,那么這就是一個常規的異常情況,需要對它進行處理,而不是異常退出。

      最后代碼改成這個樣子,send然后分析返回結果,如果錯誤,且錯誤碼為10035,那么就重發,直到發成功時,break。

      目前尚不知道,這樣改的副作用有沒有,反正現在問題暫時解決鳥

    ***********************************

     

    Winsock connect函數返回錯誤,使用WSAGetLastError得到10035,10037,是什么原因
    MSDN注釋:
    WSAEWOULDBLOCK
    10035
    Resource temporarily unavailable.
    This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
    WSAEALREADY
    10037
    Operation already in progress.
    An operation was attempted on a nonblocking socket with an operation already in progress—that is, calling connect a second time on a nonblocking socket that is already connecting, or canceling an asynchronous request (WSAAsyncGetXbyY) that has already been canceled or completed.
    網絡翻譯:
    10035—WSAEWOULDBLOCK
    資源暫時不可用。對非鎖定套接字來說,如果請求操作不能立即執行的話,通常會返回這個錯誤。比如說,在一個非暫停套接字上調用 connect,就會返回這個錯誤。因為連接請求不能立即執行。
    10037—WSAEALREADY
    操作已完成。一般來說,在非鎖定套接字上嘗試已處于進程中的操作時,會產生這個錯誤。比如,在一個已處于連接進程的非鎖定套接字上,再一次調用 connect 或 WSAConnect。另外,服務提供者處于執行回調函數(針對支持回調例程的 Winsock函數)的進程中時,也會出現這個錯誤。
    我描述下問題:使用socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);創建一個TCP/IP套接字,然后創建一個線程,不停地用connect函數進行鏈接,直到鏈接成功,才退出線程,問題來了,connect函數它有時候返回成功,有時候又返回錯誤,用WSAGetLastError得到享受10035, 10037這兩種錯誤值,我將錯誤值打印出來,結果是:10035,10035,10037,10037,10037,10037,10037.......,10037。

    ****************************************************************

     

     

     

     

    WSADATA wsd;
    SOCKET cClient;
    int ret;
    struct sockaddr_in server;
    hostent *host=NULL;
    if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;}
    cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(cClient==INVALID_SOCKET){return 0;}
    //set Recv and Send time out
    int TimeOut=6000; //設置發送超時6秒
    if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
    return 0;
    }
    TimeOut=6000;//設置接收超時6秒
    if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
    return 0;
    }
    //設置非阻塞方式連接
    unsigned long ul = 1;
    ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
    if(ret==SOCKET_ERROR)return 0;
    //連接
    server.sin_family = AF_INET;
    server.sin_port = htons(25);
    server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
    if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
    connect(cClient,(const struct sockaddr *)&server,sizeof(server));
    //select 模型,即設置超時
    struct timeval timeout ;
    fd_set r;
    FD_ZERO(&r);
    FD_SET(cClient, &r);
    timeout.tv_sec = 15; //連接超時15秒
    timeout.tv_usec =0;
    ret = select(0, 0, &r, 0, &timeout);
    if ( ret <= 0 )
    {
    ::closesocket(cClient);
    return 0;
    }
    //一般非鎖定模式套接比較難控制,可以根據實際情況考慮 再設回阻塞模式
    unsigned long ul1= 0 ;
    ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
    if(ret==SOCKET_ERROR){
    ::closesocket (cClient);
    return 0;
    }

     

     

     

    //設置非阻塞方式連接
    unsigned long ul = 1;
    ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
    if(ret==SOCKET_ERROR)return 0;
    //連接
    server.sin_family = AF_INET;
    server.sin_port = htons(25);
    server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
    if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
    connect(cClient,(const struct sockaddr *)&server,sizeof(server));
    //select 模型,即設置超時
    struct timeval timeout ;
    fd_set r;
    FD_ZERO(&r);
    FD_SET(cClient, &r);
    timeout.tv_sec = 15; //連接超時15秒
    timeout.tv_usec =0;
    ret = select(0, 0, &r, 0, &timeout);
    if ( ret <= 0 )
    {
    ::closesocket(cClient);
    return 0;
    }
    //一般非鎖定模式套接比較難控制,可以根據實際情況考慮 再設回阻塞模式
    unsigned long ul1= 0 ;
    ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
    if(ret==SOCKET_ERROR){
    ::closesocket (cClient);
    return 0;
    }

     

    ------------------------------------------

     

     

    // Socket中如何設置連接超時
    // AntGhazi/2001.12.14 主頁:antghazi.yeah.net
    /*
    把CSDN與中文yahoo翻了底朝天, 也沒找到如何設置socket的連接超時的滿意方法, 問此問題的兄弟已有一大堆,
    這里偶就講一下win下如何設置socket的connect超時. 設置connect的超時很簡單, CSDN上也有人提到過使用select,
    但卻沒有一個令人滿意與完整的答案. 偶所講的也正是select函數, 此函數集成在winsock1.1中, 簡單點講,"作用使
    那些想避免在套接字調用過程中被鎖定的應用程序, 采取一種有序的方式, 同時對多個套接字進行管理"
    (<<Windows網絡編程技術>>原話). 使用方法與解釋請見《Windows網絡編程技術》.
    在使用此函數前, 需先將socket設置為非鎖定模式, 這樣, 在connect時,才會立馬跳過,
    同時, 通常也會產生一個WSAEWOULDBLOCK錯誤,這個錯誤沒關系. 再執行select則是真正的超時.
    */
    WSADATA wsd;
    SOCKET cClient;
    int ret;
    struct sockaddr_in server;
    hostent *host=NULL;
    if(WSAStartup(MAKEWORD(2,0),&wsd))
    {
    return 0;
    }
    cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(cClient==INVALID_SOCKET)
    {
    return 0;
    }
    //set Recv and Send time out
    int TimeOut=6000; //設置發送超時6秒
    if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
    {
    return 0;
    }
    TimeOut=6000;//設置接收超時6秒
    if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
    {
    return 0;
    }
    //設置非阻塞方式連接
    unsigned long ul = 1;
    ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
    if(ret==SOCKET_ERROR)return 0;
    //連接
    server.sin_family = AF_INET;
    server.sin_port = htons(25);
    server.sin_addr.s_addr = inet_addr((LPCSTR)pSmtp);
    if(server.sin_addr.s_addr == INADDR_NONE)
    {
    return 0;
    }
    connect(cClient,(const struct sockaddr *)&server,sizeof(server));
    //select 模型,即設置超時
    struct timeval timeout ;
    fd_set r;
    FD_ZERO(&r);
    FD_SET(cClient, &r);
    timeout.tv_sec = 15; //連接超時15秒
    timeout.tv_usec = 0;
    ret = select(0, 0, &r, 0, &timeout);
    if ( ret <= 0 )
    {
    ::closesocket(cClient);
    return 0;
    }
    //一般非鎖定模式套接比較難控制,可以根據實際情況考慮 再設回阻塞模式
    unsigned long ul1= 0 ;
    ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
    if(ret==SOCKET_ERROR)
    {
    ::closesocket (cClient);
    return 0;
    }
    /////////////////////////////////////////////////////////////////
    以前我從csdn上找到的,注意如果調用connect返回SOCKET_ERROR,那么你要調用 WSAGetLastError(),看錯誤是不是WSAEWOULDBLOCK,如果是,則忽略,否則是真的出錯了。

     

     

     

    -------------------------------------------------------------

     

     

    這個應該是可以用的,因為我用過,我的代碼是這樣的,供你參考
    LPHOSTENT ScanIPAddr(DWORD dwIP)
    {
    SOCKET sock = INVALID_SOCKET;
    LPHOSTENT lphost = NULL;
    SOCKADDR_IN server;
    u_long ul = 1;
    struct timeval timeout ;
    fd_set r;
    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = _nPort;
    server.sin_addr.s_addr = htonl((u_long)dwIP);
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(sock == INVALID_SOCKET)
    return NULL;
    //設置非阻塞方式連接
    if(ioctlsocket(sock, FIONBIO, (u_long*)&ul)==SOCKET_ERROR)
    return NULL;
    if(0 != connect(sock, (SOCKADDR*)&server, sizeof(server)))
    {
    if(WSAGetLastError() != WSAEWOULDBLOCK)
    {
    closesocket(sock);
    return NULL;
    }
    }
    //select 模型,即設置超時
    FD_ZERO(&r);
    FD_SET(sock, &r);
    timeout.tv_sec = 0; //連接超時0秒
    timeout.tv_usec = 700;
    if(select(0, 0, &r, 0, &timeout) <= 0)
    {
    closesocket(sock);
    return NULL;
    }
    lphost = gethostbyaddr((const char *)&(server.sin_addr), 4, AF_INET);
    closesocket(sock);
    return lphost;
    }

     

     

     

    -----------------------------------------------------------------------------

     

     

     

    下面是我的實現代碼:
    char sBuf[2048];
        int i;
    int iSRTimeOut = 6000;
        u_long arg=1;
        rc4_key key;
        int r;
        struct sockaddr_in sockaddr; 
        sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if (sock==INVALID_SOCKET)
    {
            r=WSAGetLastError();
        closesocket(sock);
        sprintf(sBuf,"Winsock Error:%d",r);
        return Error(_T(sBuf));
    }
    //設置接收超時6000毫秒
        if(setsockopt(sock,IPPROTO_TCP,SO_RCVTIMEO,(const char FAR*)&iSRTimeOut,sizeof(int))==SOCKET_ERROR)
    {
    r=WSAGetLastError();
    closesocket(sock);
    sprintf(sBuf,"Winsock Error:%d",r);
    //return Error(_T(sBuf));
    }
    //設置發送超時6000毫秒
        if(setsockopt(sock,IPPROTO_TCP,SO_SNDTIMEO,(const char FAR*)&iSRTimeOut,sizeof(int))==SOCKET_ERROR)
        {
    r=WSAGetLastError();
    closesocket(sock);
    sprintf(sBuf,"Winsock Error:%d",r);
    //return Error(_T(sBuf));
    }
    //設置非阻塞連接方式
    unsigned long ul = 1;
        r = ::ioctlsocket(sock, FIONBIO, (unsigned long*)&ul);
        if(r==SOCKET_ERROR)
    {
    r=WSAGetLastError();
    closesocket(sock);
    sprintf(sBuf,"Winsock Error:%d",r);
    // return Error(_T(sBuf));
    }
    //進行連接操作
        switch (m_ProxyType)
        {
    case 0:
           sockaddr.sin_addr.s_addr=inet_addr(m_SvrAddr);
       sockaddr.sin_port=htons((unsigned short)m_SvrPort);
       break;
        default:
           sockaddr.sin_addr.s_addr=inet_addr(m_ProxyAddr);
       sockaddr.sin_port=htons((unsigned short)m_ProxyPort);
       break;
        }
        sockaddr.sin_family=AF_INET;
        memset(sockaddr.sin_zero,0,8);
       int iReturn;
        connect(sock,(struct sockaddr*)&sockaddr,sizeof(struct sockaddr_in));
    iReturn = ConnectedReady(sock);// 連接延時
    if(iReturn == 0)
    {
    return Error(_T("Connect TimeOut!"));
    }
    if(iReturn >1)
    {
    sprintf(sBuf,"Winsock Error:%d",iReturn);
    return Error(_T(sBuf));
    }
    //設置回阻塞模式
    unsigned long ul1= 0 ;
        r = ioctlsocket(sock, FIONBIO, (unsigned long*)&ul1);
        if(r==SOCKET_ERROR)
    {
    r=WSAGetLastError();
    closesocket (sock);
    sprintf(sBuf,"Winsock Error:%d",r);
    return Error(_T(sBuf));
    }
    說明:進行setsockopt、設置非阻塞模式、一直到最后設置回阻塞模式,都有錯誤碼返回!
    功能描述:本來我的程序就是要實現:自己定義一個timeout值,在網絡不通或阻塞時,客戶端調用connect,最長等待timeout秒。
    msn:himming@hotmail.com

     

    ---------------------------------------------------------------------

    http://www.cnblogs.com/BloodAndBone/archive/2012/05/22/2513338.html

     

     

    windows下設置socket的connect超時

    變相的實現connect的超時,我要講的就是這個方法,原理上是這樣的:
    1.建立socket
    2.將該socket設置為非阻塞模式
    3.調用connect()
    4.使用select()檢查該socket描述符是否可寫(注意,是可寫)
    5.根據select()返回的結果判斷connect()結果
    6.將socket設置為阻塞模式(如果你的程序不需要用阻塞模式的,這步就省了,不過一般情況下都是用阻塞模式的,這樣也容易管理)

    復制代碼

    // widonws: 默認設置socket TCP client connect為阻塞模式
    void TcpConnect(char* strIP, UINT nPort)
    {
        struct sockaddr_in serverAddress;
        SOCKET hSocket = NULL;
    
        hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if( hSocket==INVALID_SOCKET)
        {
            return;
        }
    
        memset(&serverAddress, 0, sizeof(serverAddress));     
        serverAddress.sin_family      = AF_INET;
        serverAddress.sin_addr.s_addr = inet_addr(strIP);   
        serverAddress.sin_port        = htons((short)nPort);      
        int iTimeOut = 3000;
        setsockopt(hSocket,SOL_SOCKET,SO_RCVTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));
        setsockopt(hSocket,SOL_SOCKET,SO_SNDTIMEO,(char*)&iTimeOut,sizeof(iTimeOut));    
    
        if( SOCKET_ERROR==connect(hSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) )
        {        
            closesocket(hSocket);
            DWORD gle = WSAGetLastError();
    
            return;
        }
    
        char buff[] = "hello";
        int sl=::send(hSocket,(char*)buff, sizeof(buff), 0);
        if( sl<0 )
        {
            closesocket(hSocket);
            return ;
        }
        closesocket(hSocket);
    }
    
    // widonws: 設置socket TCP client connect非阻塞模式
    void SockSelect(char* strIP, UINT nPort)
    {
        SOCKET/*int*/ sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if(sockfd < 0) 
        {
            return;
        }
        struct sockaddr_in serv_addr;
    
        //以服務器地址填充結構serv_addr
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = inet_addr(strIP);
        serv_addr.sin_port = htons(nPort);
        int error = -1;
        int len = sizeof(int);
        timeval tm;
        fd_set set;
        unsigned long ul = 1;
        ioctlsocket(sockfd, FIONBIO, &ul); //設置為非阻塞模式
        bool ret = false;
        if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
        {
            tm.tv_sec  = 3;
            tm.tv_usec = 0;
            FD_ZERO(&set);
            FD_SET(sockfd, &set);
            if( select(sockfd+1, NULL, &set, NULL, &tm) > 0)
            {
                getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char *)&error, /*(socklen_t *)*/&len);
                if(error == 0) 
                    ret = true;
                else 
                    ret = false;
            } 
            else 
                ret = false;
        }
        else 
            ret = true;
        ul = 0;
        ioctlsocket(sockfd, FIONBIO, &ul); //設置為阻塞模式
        if(!ret) 
        {
            closesocket( sockfd );
            fprintf(stderr , "Cannot Connect the server!/n");
            return;
        }
    
        fprintf( stderr , "Connected!/n");
    
        char buff[] = "hello";
        int sl=::send(sockfd,(char*)buff, sizeof(buff), 0);
    
        closesocket( sockfd );
    }

    復制代碼

    分類: c/c++, VC++

    posted @ 2013-08-22 18:14 小高 閱讀(785) | 評論 (0)編輯 收藏
    僅列出標題
    共20頁: First 上一頁 8 9 10 11 12 13 14 15 16 下一頁 Last 

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(3)

    隨筆分類(352)

    收藏夾(19)

    關注的blog

    手冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: a级毛片在线免费观看| 久久国产福利免费| 亚洲日韩看片无码电影| 亚洲日韩乱码中文字幕| 免费可以在线看A∨网站| 日韩高清免费在线观看| 亚洲国产综合久久天堂| 久久精品国产精品亚洲艾| 久久久久亚洲国产| 一个人看的www免费高清| 日本免费一区二区三区| 日韩中文无码有码免费视频| 亚洲日本国产综合高清| 成年人性生活免费视频| 亚洲成AV人在线观看天堂无码| 亚洲欧美日韩久久精品| 在线观看国产情趣免费视频| 免费大片av手机看片| 99在线免费观看视频| 亚洲另类图片另类电影| 女人隐私秘视频黄www免费| 亚洲AV永久无码精品| 999国内精品永久免费视频| 在线观看亚洲成人| 亚洲永久网址在线观看| 37pao成人国产永久免费视频 | 久久精品国产这里是免费| 麻豆国产VA免费精品高清在线 | 亚洲男人天堂av| 国产精品福利片免费看| 国产国产人免费视频成69大陆| 亚洲精品在线不卡| 久久99毛片免费观看不卡| 国产成人精品曰本亚洲79ren| 精品久久亚洲一级α| 青苹果乐园免费高清在线| 免费无码专区毛片高潮喷水| 亚洲A∨无码一区二区三区| 成av免费大片黄在线观看| 中文字幕亚洲无线码| 黄+色+性+人免费|