亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 搶先式多線程網絡蜘蛛.txt

?? 幾個Internet網絡編程的資料和源碼
?? TXT
字號:
搶先式多線程網絡蜘蛛
    Win32 API 支持搶先式多線程網絡,這是編寫MFC網絡蜘蛛非常有用的地方。
SPIDER工程(程序)是一個如何用搶先式多線程技術實現在網上用網絡蜘蛛/機器
人聚集信息的程序。

  該工程產生一個象蜘蛛一樣行動的程序,該程序為斷開的URL鏈接檢查WEB站點。
鏈接驗證僅在href指定的鏈接上進行。它在一列表視圖CListView中顯示不斷更新
的URL列表,以反映超鏈接的狀態。本工程能用作收集、索引信息的模板,該模板
將這些信息存入到可以用于查詢的數據庫文件中。

  搜索引擎在WEB上使用叫作Robots(也叫爬蟲,蜘蛛,蠕蟲,漫步者,滑行者等等)
的程序收集信息,它從WEB上自動地聚集和索引信息,接著將這些信息存入數據庫。
(注意:一個機器人將搜索一個頁面,然后把這個頁面上的鏈接作為將要索引的新
的URL的起點)用戶可創建查詢去查詢這些數據庫以發現他們需要的信息。 

  通過搶先式多線程地使用,你能索引一個基于URL鏈接的WEB頁面,啟動一個新的
線程跟隨每個新的URL鏈接,索引一個新的URL起點。本工程使用和自定義的MDI子
框架一起使用的MDI 文檔類,在下載WEB頁面時顯示一個編輯視圖,在檢查URL連接
時顯示一個列表視圖。另外,本工程使用了CObArray,CInternetSession,CHttpConnection,
ChttpFile和CWinThread MFC類。CWinThread類用于產生多線程來代替在CInternetSession
類中的異步模式,這種模式是從insock的16位windows平臺保留下來的。SPIDER
工程使用簡單的工作線程去檢查URL鏈接,或者下載一個Web頁面。CSpiderThread類
是從CWinThread類中派生的,所以,每個CSpiderThread對象可以使用CWinThread 的
MESSAGE_MAP()函數。通過在CSpiderThread類中聲明"DECLARE_MESSAGE_MAP()",
用戶接口可以響應用戶的輸入。這意味著你可以在一個Web服務器上檢查URL鏈接的同時,
你可以從另一個Web服務器上下載或打開一個Web頁面。只有在線程數超過定義為64的
MAXIMUM_WAIT_OBJECTS時,用戶接口將不會響應用戶的輸入。在每個CSpiderThread對
象的構造函數中,我們提供了ThreadProc函數以及將傳送到ThreadProc函數的線程參數。

CSpiderThread* pThread;
pThread = NULL;
pThread = new CSpiderThread(CSpiderThread::ThreadFunc,pThreadParams); // 創建一個新的 CSpiderThread 對象;

在類CSpiderThread 構造函數中我們在線程參數中設置指針CWinThread* m_pThread ,
于是我們可以指向這個線程正確的事例:
pThreadParams->m_pThread = this;

The CSpiderThread ThreadProc Function 

// 簡單的工作線程函數
UINT CSpiderThread::ThreadFunc(LPVOID pParam)
{
    ThreadParams * lpThreadParams = (ThreadParams*) pParam;
    CSpiderThread* lpThread = (CSpiderThread*) lpThreadParams->m_pThread;
    
    lpThread->ThreadRun(lpThreadParams);

    // 這里使用SendMessage代替PostMessageUse,以保持當前線程數同步。
    // 如果線程數大于 MAXIMUM_WAIT_OBJECTS (64), 本程序將變得不能響應用戶輸入

    ::SendMessage(lpThreadParams->m_hwndNotifyProgress,
        WM_USER_THREAD_DONE, 0, (LPARAM)lpThreadParams); 
    // 刪除lpThreadParams 和減少線程總數

    return 0;
}

這個結構傳遞給CSpiderThread ThreadProc函數
typedef struct tagThreadParams
{
    HWND m_hwndNotifyProgress;
    HWND m_hwndNotifyView;
    CWinThread* m_pThread;
    CString m_pszURL;
    CString m_Contents;
    CString m_strServerName;
    CString m_strObject;
    CString m_checkURLName;
    CString m_string;
    DWORD m_dwServiceType;
    DWORD m_threadID;
    DWORD m_Status;
    URLStatus m_pStatus;
    INTERNET_PORT m_nPort;
    int m_type;
    BOOL m_RootLinks;

}ThreadParams; 

CSpiderThread對象創建后,我們用CreatThread函數開始一個新的線程對象地執行。

    if (!pThread->CreateThread()) //開始一 CWinThread 對象地執行
    {
        AfxMessageBox("Cannot Start New Thread");
        delete pThread;
        pThread = NULL;
        delete pThreadParams;
        return FALSE;
    } 
一旦新的線程正在運行,我們使用::SengMessage函數發送消息到 CDocument's-> CListView ,這個消息帶有URL鏈接的狀態結構。
    if(pThreadParams->m_hwndNotifyView != NULL)
        ::SendMessage(pThreadParams->m_hwndNotifyView,WM_USER_CHECK_DONE, 0, (LPARAM) &pThreadParams->m_pStatus);

URL狀態的結構:

typedef struct tagURLStatus
{
    CString m_URL;
    CString m_URLPage;
    CString m_StatusString;
    CString m_LastModified;
    CString m_ContentType;
    CString m_ContentLength;
    DWORD    m_Status;
}URLStatus, * PURLStatus;

  每個新的線程建立一個新的CMyInternetSession類(派生于CInternetSession)對象,
并把 EnableStatusCallback設置為TRUE,于是,我們可以在所有的InternetSession回
調時檢查狀態。將回調使用的dwContext ID設置為線程ID。

BOOL CInetThread::InitServer()
{
    
    try
    {
        m_pSession = new CMyInternetSession(AgentName,m_nThreadID);
        int ntimeOut = 30; // 很重要!如果設置太小回引起服務器超時,如果設置太大則回引起線程掛起。
        /*
        網絡連接請求時間超時值在數毫秒級。如果連接請求時間超過這個超時值,請求將被取消。
        缺省的超時值是無限的。
        */
        m_pSession->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000* ntimeOut);
        
        /* 在重試連接之間的等待的延時值在毫秒級。*/
        m_pSession->SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);
        
        /* 在網絡連接請求時的重試次數。如果一個連接企圖在指定的重試次數后仍失敗,則請求被取消。 缺省值為5。 */
        m_pSession->SetOption(INTERNET_OPTION_CONNECT_RETRIES,1);
    m_pSession->EnableStatusCallback(TRUE);

    }
    catch (CInternetException* pEx)
    {
        // catch errors from WinINet
        //pEx->ReportError();
        m_pSession = NULL;
        pEx->Delete();
        return FALSE ;
    }

    return TRUE;
}

  在一個單或多線程程序中使用MFC WinIne類,關鍵是要在所有MFC WinInet類函數
周圍使用try和catch塊。因為互連網有時很不穩定,或者你訪問的Web頁面已不存在,
則這種情況下,將拋出一個CInternetException錯誤。


    try
    {
        // some MFC WinInet class function
    }
    catch (CInternetException* pEx)
    {
        // catch errors from WinINet
        //pEx->ReportError();
        pEx->Delete();
        return FALSE ;
    }
  最初線程數最大設置為64,你可以將它設置為從1到100的任何數。設置太高會使鏈
接失敗,意味著你將不得不重新檢查URL鏈接。在/cgi-bin/目錄下一個連續不斷地迅
猛地HTTP請求會使服務器崩潰。SPIDER 程序在1秒中發送四個HTTP請求,1分鐘240個。
這也將會使服務器崩潰。在任何服務器上你檢查時放仔細一點。每個服務器都有一個
請求Web文件的請求代理IP地址的日志。你或許會收到來自Web服務器管理員的齷齪的郵件。


  你可以為一些目錄建立robots.txt 文件來防止這些目錄被索引。這個機制通常用于
保護/cgi-bin/ 目錄。CGI腳本占用更多的要檢索的服務器資源。當SPIDER程序檢查URL
鏈接時,它的目標是不太快地請求太多的文檔。SPIDER程序堅持機器人拒絕的標準。
這個標準是機器人開發者之間的協議,允許WWW站點限制URL上的機器人的請求。通過
使用這個限制訪問的標準,機器人將不檢索Web服務器希望拒絕的任何文檔。在檢查根
URL前,程序檢查看是否有robots.txt文件在主目錄下。如果SPIDER程序發現robots.txt
文件,將放棄搜索。另外,程序也檢查所有Web頁面中的META標記。如果發現一個META標
記,它的NAME="ROBOTS" CONTENT ="NOINDEX,NOFOLLOW",則不索引那個頁面上的URL。

創建: 
Windows 95 
MFC/VC++ 5.0 
WinInet.h 時間 9/25/97 
WinInet.lib 時間 9/16/97 
WinInet.dll 時間 9/18/97 


問題:

允許 32,767 個URL 鏈接在 CListView 中。
不能分析 URL的正確性 。


資料: 
Internet tools - Fred Forester 
Multithreading Applications in Win32 
Win32 Multithreaded Programming 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论片在线| 精品少妇一区二区三区在线播放| 国模一区二区三区白浆| 日韩av在线播放中文字幕| 一区二区三区四区五区视频在线观看| 久久嫩草精品久久久久| 精品久久国产老人久久综合| 欧美一区永久视频免费观看| 91麻豆精品国产91久久久使用方法 | 精品在线一区二区三区| 亚洲第一综合色| 五月婷婷色综合| 蜜臀精品一区二区三区在线观看| 日韩国产一二三区| 久久超级碰视频| 国产精品69毛片高清亚洲| 丁香五精品蜜臀久久久久99网站| 大美女一区二区三区| 91丝袜美女网| 欧美日韩国产三级| 日韩三级视频在线观看| 久久久久久影视| 中文字幕一区二区三区不卡| 亚洲女同女同女同女同女同69| 依依成人精品视频| 日韩电影在线看| 国产尤物一区二区| 一本色道久久综合精品竹菊| 欧美精品三级在线观看| 26uuu精品一区二区三区四区在线| 国产女人18毛片水真多成人如厕| 亚洲女爱视频在线| 日韩av一区二| 福利一区二区在线观看| 色欲综合视频天天天| 欧美一区二区不卡视频| 亚洲国产精品99久久久久久久久 | 最新不卡av在线| 日韩高清中文字幕一区| 国产精品系列在线播放| 欧美午夜在线观看| 精品国产免费视频| 一区二区三区中文字幕| 九九精品一区二区| 欧美四级电影网| 久久亚洲私人国产精品va媚药| 亚洲精选一二三| 国内久久精品视频| 777亚洲妇女| 综合欧美一区二区三区| 麻豆精品一区二区综合av| 91色综合久久久久婷婷| 欧美成人a∨高清免费观看| 亚洲欧洲制服丝袜| 黄色日韩网站视频| 欧美理论电影在线| 中文字幕一区二区三区在线不卡 | 中文字幕免费观看一区| 日韩高清不卡一区| 色吧成人激情小说| 久久先锋影音av鲁色资源网| 日韩电影免费一区| 欧美综合天天夜夜久久| 欧美国产在线观看| 狠狠色综合色综合网络| 欧美日韩激情一区二区三区| 中文字幕中文字幕在线一区| 国产剧情一区在线| 欧美精品一区男女天堂| 日韩av一区二区在线影视| 欧美三级电影精品| 亚洲天堂2016| aaa国产一区| 国产午夜精品理论片a级大结局| 奇米777欧美一区二区| 欧美日韩国产成人在线91| 亚洲一区二区在线视频| 91麻豆高清视频| 亚洲欧美日韩国产另类专区| 国产91精品一区二区| 国产色产综合色产在线视频| 国产在线精品一区在线观看麻豆| 欧美大片国产精品| 奇米影视一区二区三区小说| 日韩欧美一区在线| 美女性感视频久久| 精品处破学生在线二十三| 狠狠色综合色综合网络| 久久影院电视剧免费观看| 国产伦精品一区二区三区视频青涩 | 日韩va欧美va亚洲va久久| 欧美色图激情小说| 日韩av高清在线观看| 日韩精品在线一区二区| 紧缚捆绑精品一区二区| 国产性天天综合网| 91性感美女视频| 亚洲国产成人av| 日韩午夜三级在线| 粉嫩久久99精品久久久久久夜| 国产精品成人免费| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲美女免费视频| 欧美日本一道本| 激情av综合网| 亚洲精品伦理在线| 日韩小视频在线观看专区| 成人一道本在线| 亚洲国产日韩一级| 精品福利视频一区二区三区| 91丝袜美腿高跟国产极品老师| 亚洲成av人片在线观看无码| 国产亚洲精品超碰| 欧美性感一类影片在线播放| 激情偷乱视频一区二区三区| 国产精品女上位| 欧美一级夜夜爽| 99精品久久99久久久久| 久久精品国产在热久久| 亚洲欧美另类小说视频| 精品sm在线观看| 欧美无乱码久久久免费午夜一区| 精品亚洲欧美一区| 亚洲大片免费看| 国产精品久久午夜| 日韩欧美亚洲国产另类| 91亚洲永久精品| 国产成人h网站| 视频一区二区中文字幕| 国产欧美1区2区3区| 欧美一区二区三区在线观看| av电影在线观看不卡| 免费观看在线色综合| 一个色妞综合视频在线观看| 国产人妖乱国产精品人妖| 91精品国产色综合久久| 色屁屁一区二区| caoporn国产精品| 国模一区二区三区白浆| 奇米影视一区二区三区小说| 亚洲无人区一区| 有码一区二区三区| 国产精品伦理在线| 国产亚洲一区字幕| 精品理论电影在线| 91精品国产丝袜白色高跟鞋| 欧美私人免费视频| 欧美影院一区二区| 一本色道久久综合亚洲91| 99久免费精品视频在线观看| 国产高清不卡一区| 高清视频一区二区| 国产在线观看一区二区| 国产麻豆精品theporn| 韩国女主播成人在线| 狠狠色狠狠色合久久伊人| 麻豆一区二区99久久久久| 天堂蜜桃一区二区三区| 午夜精品在线看| 色呦呦日韩精品| 色综合色狠狠综合色| 91视频你懂的| 欧美系列在线观看| 欧美日韩一级片在线观看| 欧美日韩午夜在线视频| 欧美日韩一区二区三区高清| 欧美绝品在线观看成人午夜影视| 欧美日韩中文字幕一区二区| 欧美久久久影院| 欧美xingq一区二区| 26uuu亚洲| 国产精品久久综合| 伊人色综合久久天天人手人婷| 亚洲高清中文字幕| 日本不卡中文字幕| 国产精品88av| 91蝌蚪porny| 欧美日韩国产一区二区三区地区| 5566中文字幕一区二区电影| 精品乱人伦小说| 国产精品成人网| 日韩国产精品大片| 国产高清久久久| 在线观看三级视频欧美| 日韩一区二区三区三四区视频在线观看| 日韩一级完整毛片| 国产亚洲女人久久久久毛片| 亚洲天堂中文字幕| 麻豆精品新av中文字幕| www.在线欧美| 欧美精品亚洲二区| 国产日韩欧美亚洲| 一区二区三区欧美日| 久久99国内精品| 91浏览器打开| 久久久国产午夜精品| 亚洲成人一二三| 国产成人精品免费一区二区| 欧美剧情片在线观看| 国产精品美女久久久久aⅴ |