易語(yǔ)言實(shí)現(xiàn)多線程驗(yàn)證代理是否有效的代碼
更新時(shí)間:2018年11月28日 14:39:35 作者:易語(yǔ)言源碼教程
今天小編就為大家分享一篇關(guān)于易語(yǔ)言實(shí)現(xiàn)多線程驗(yàn)證代理是否有效的代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
載入程序
.版本 2 .程序集 啟動(dòng) .子程序 _啟動(dòng)子程序, 整數(shù)型 載入 (_主窗口, , 假) 返回 (0)
多線程的方式驗(yàn)證ip的代碼
此功能需要加載魚(yú)刺類(lèi)_線程操作模塊和魚(yú)刺類(lèi)_HTTP模塊
.版本 2
.支持庫(kù) iext
.程序集 主窗口程序集
.程序集變量 線程池, 魚(yú)刺類(lèi)_線程池Ex, , , 框架
.程序集變量 臨界, 魚(yú)刺類(lèi)_臨界許可
.程序集變量 線程, 魚(yú)刺類(lèi)_線程操作
.程序集變量 驗(yàn)證網(wǎng)址, 文本型, , , 配置
.程序集變量 驗(yàn)證字符串, 文本型
.程序集變量 是否UTF解碼, 邏輯型
.程序集變量 連接超時(shí), 整數(shù)型
.程序集變量 驗(yàn)證超時(shí), 整數(shù)型
.程序集變量 已完成數(shù)量, 整數(shù)型, , , 記錄
.程序集變量 有效數(shù)量, 整數(shù)型
.程序集變量 失效數(shù)量, 整數(shù)型
.程序集變量 保證顯示索引, 整數(shù)型
.子程序 _按鈕_測(cè)試_被單擊
.局部變量 測(cè)試, 魚(yú)刺類(lèi)_線程操作, 靜態(tài)
.局部變量 bool, 邏輯型
按鈕_測(cè)試.禁止 = 真
驗(yàn)證網(wǎng)址 = 編輯框_驗(yàn)證網(wǎng)址.內(nèi)容
驗(yàn)證字符串 = 編輯框_驗(yàn)證字符串.內(nèi)容
是否UTF解碼 = 選擇框_UTF解碼.選中
.如果真 (驗(yàn)證網(wǎng)址 = “” 或 驗(yàn)證字符串 = “”)
信息框 (“網(wǎng)址或字符串填寫(xiě)錯(cuò)誤!”, 48 + 65536, )
按鈕_測(cè)試.禁止 = 假
返回 ()
.如果真結(jié)束
bool = 測(cè)試.創(chuàng)建 (&測(cè)試驗(yàn)證網(wǎng)址)
.如果真 (bool = 真)
測(cè)試.等待2 ()
.判斷開(kāi)始 (測(cè)試.取返回值 () = 1) ' 利用線程返回狀態(tài)判斷測(cè)試是否成功
信息框 (“測(cè)試成功!驗(yàn)證網(wǎng)址和關(guān)鍵字可用”, 64 + 65536, )
.默認(rèn)
信息框 (“測(cè)試失敗!驗(yàn)證網(wǎng)址和關(guān)鍵字符串不可用”, 48 + 65536, )
.判斷結(jié)束
.如果真結(jié)束
按鈕_測(cè)試.禁止 = 假
.子程序 測(cè)試驗(yàn)證網(wǎng)址, 整數(shù)型
.局部變量 http, WinHttp
.局部變量 str, 文本型
http.Open (“GET”, 驗(yàn)證網(wǎng)址)
http.Set_User_Agent ()
http.Send ()
.判斷開(kāi)始 (是否UTF解碼 = 真)
str = http.GetResponseTextUtf8 ()
.默認(rèn)
str = http.GetResponseText ()
.判斷結(jié)束
.如果真 (尋找文本 (str, 驗(yàn)證字符串, , 假) ≠ -1)
返回 (1) ' 返回狀態(tài)用于判斷是否成功
.如果真結(jié)束
返回 (0)
.子程序 _按鈕_導(dǎo)入_被單擊
.局部變量 int, 整數(shù)型
.局部變量 str, 文本型
.局部變量 strs, 文本型, , "0"
.局部變量 ip, 文本型
.局部變量 端口, 文本型
.局部變量 o, 整數(shù)型
通用對(duì)話框_瀏覽.類(lèi)型 = 0
通用對(duì)話框_瀏覽.過(guò)濾器 = “文本文檔(*.txt)|*.txt”
.如果真 (通用對(duì)話框_瀏覽.打開(kāi) () = 假)
返回 ()
.如果真結(jié)束
按鈕_導(dǎo)入.禁止 = 真
int = 打開(kāi)文件 (通用對(duì)話框_瀏覽.文件名, 1, )
.如果真 (int = 0)
按鈕_導(dǎo)入.禁止 = 假
返回 ()
.如果真結(jié)束
.判斷循環(huán)首 (是否在文件尾 (int, ) = 假)
str = 讀入一行 (int)
str = 刪首尾空 (str)
strs = 分割文本 (str, “:”, 2)
.如果真 (取數(shù)組成員數(shù) (strs) = 2)
ip = strs [1]
端口 = strs [2]
.如果真 (ip ≠ “” 且 端口 ≠ “”)
o = 列表_代理.插入表項(xiàng) (, , , 0, , )
列表_代理.置標(biāo)題 (o, 0, 到文本 (o + 1))
列表_代理.置標(biāo)題 (o, 1, ip)
列表_代理.置標(biāo)題 (o, 2, 端口)
列表_代理.置標(biāo)題 (o, 3, “**”)
列表_代理.置標(biāo)題 (o, 4, “-”)
_處理事件 ()
.如果真結(jié)束
.如果真結(jié)束
.判斷循環(huán)尾 ()
關(guān)閉文件 (int)
狀態(tài)條_狀態(tài).置文本 (0, “代理總數(shù):” + 到文本 (列表_代理.取表項(xiàng)數(shù) ()))
按鈕_導(dǎo)入.禁止 = 假
.子程序 _按鈕_導(dǎo)出_被單擊
.局部變量 bool, 邏輯型
.局部變量 i, 整數(shù)型
.局部變量 int, 整數(shù)型
.局部變量 ip, 文本型
.局部變量 端口, 文本型
.局部變量 time, 文本型
.局部變量 stop, 文本型
.局部變量 text, 文本型
.局部變量 len, 整數(shù)型
.如果真 (列表_代理.取表項(xiàng)數(shù) () < 1)
信息框 (“沒(méi)代理可導(dǎo)出”, 48 + 65536, , )
返回 ()
.如果真結(jié)束
bool = 信息框 (“是否只導(dǎo)出有效代理”, #是否鈕 + 48 + 65536, ) = #是鈕
通用對(duì)話框_瀏覽.類(lèi)型 = 1
通用對(duì)話框_瀏覽.過(guò)濾器 = “文本文檔(*.txt)|*.txt”
.如果真 (通用對(duì)話框_瀏覽.打開(kāi) () = 假)
返回 ()
.如果真結(jié)束
按鈕_導(dǎo)出.禁止 = 真
int = 打開(kāi)文件 (通用對(duì)話框_瀏覽.文件名, 4, )
移到文件尾 (int)
.變量循環(huán)首 (0, 列表_代理.取表項(xiàng)數(shù) () - 1, 1, i)
_處理事件 ()
stop = 列表_代理.取標(biāo)題 (i, 4)
.如果真 (bool = 真 且 stop ≠ “驗(yàn)證成功”)
到循環(huán)尾 ()
.如果真結(jié)束
ip = 列表_代理.取標(biāo)題 (i, 1)
端口 = 列表_代理.取標(biāo)題 (i, 2)
time = 列表_代理.取標(biāo)題 (i, 3)
text = ip + “:” + 端口 + “----” + time
.如果真 (bool = 假)
text = text + “----” + stop
.如果真結(jié)束
寫(xiě)文本行 (int, text)
len = len + 1
.變量循環(huán)尾 ()
關(guān)閉文件 (int)
信息框 (“保存:” + 通用對(duì)話框_瀏覽.文件名 + “ 成功!” + #換行符 + “共導(dǎo)出:” + 到文本 (len) + “ 條?!? 64 + 65536, )
按鈕_導(dǎo)出.禁止 = 假
.子程序 _按鈕_開(kāi)始停止_被單擊
.局部變量 text, 文本型
.局部變量 bool, 邏輯型
.局部變量 len, 整數(shù)型
按鈕_開(kāi)始停止.禁止 = 真
text = 按鈕_開(kāi)始停止.標(biāo)題
.判斷開(kāi)始 (text = “開(kāi)始驗(yàn)證”)
len = 列表_代理.取表項(xiàng)數(shù) ()
.如果真 (len < 1)
信息框 (“請(qǐng)先導(dǎo)入要驗(yàn)證的代理”, 48 + 65536, )
按鈕_開(kāi)始停止.禁止 = 假
返回 ()
.如果真結(jié)束
驗(yàn)證網(wǎng)址 = 刪首尾空 (編輯框_驗(yàn)證網(wǎng)址.內(nèi)容)
驗(yàn)證字符串 = 編輯框_驗(yàn)證字符串.內(nèi)容
.如果真 (驗(yàn)證網(wǎng)址 = “” 或 驗(yàn)證字符串 = “”)
信息框 (“驗(yàn)證網(wǎng)址或字符串不正確!”, 48 + 65536, )
按鈕_開(kāi)始停止.禁止 = 假
返回 ()
.如果真結(jié)束
是否UTF解碼 = 選擇框_UTF解碼.選中
連接超時(shí) = 到整數(shù) (編輯框_連接超時(shí).內(nèi)容)
驗(yàn)證超時(shí) = 到整數(shù) (編輯框_驗(yàn)證超時(shí).內(nèi)容)
連續(xù)賦值 (0, 已完成數(shù)量, 有效數(shù)量, 失效數(shù)量, 保證顯示索引)
更新?tīng)顟B(tài)條 ()
bool = 線程.創(chuàng)建 (&工作)
.如果真 (bool = 真)
返回 ()
.如果真結(jié)束
.判斷 (text = “停止驗(yàn)證”)
按鈕_開(kāi)始停止.標(biāo)題 = “正在停止”
按鈕_暫停繼續(xù).禁止 = 真
按鈕_暫停繼續(xù).標(biāo)題 = “暫停驗(yàn)證”
線程池.銷(xiāo)毀 (0)
線程.等待2 ()
按鈕_開(kāi)始停止.標(biāo)題 = “開(kāi)始驗(yàn)證”
.默認(rèn)
.判斷結(jié)束
按鈕_開(kāi)始停止.禁止 = 假
.子程序 _按鈕_暫停繼續(xù)_被單擊
.局部變量 text, 文本型
按鈕_暫停繼續(xù).禁止 = 真
text = 按鈕_暫停繼續(xù).標(biāo)題
.判斷開(kāi)始 (text = “暫停驗(yàn)證”)
線程池.暫停 ()
按鈕_暫停繼續(xù).標(biāo)題 = “繼續(xù)驗(yàn)證”
.判斷 (text = “繼續(xù)驗(yàn)證”)
線程池.繼續(xù) ()
按鈕_暫停繼續(xù).標(biāo)題 = “暫停驗(yàn)證”
.默認(rèn)
.判斷結(jié)束
按鈕_暫停繼續(xù).禁止 = 假
.子程序 工作
.局部變量 并發(fā)線程數(shù), 整數(shù)型
.局部變量 bool, 邏輯型
.局部變量 len, 整數(shù)型
.局部變量 i, 整數(shù)型
.局部變量 空閑線程數(shù), 整數(shù)型
.局部變量 int, 整數(shù)型
按鈕_開(kāi)始停止.標(biāo)題 = “正在啟動(dòng)”
.如果真 (連接超時(shí) < 500)
連接超時(shí) = 500
.如果真結(jié)束
.如果真 (驗(yàn)證超時(shí) < 500)
驗(yàn)證超時(shí) = 500
.如果真結(jié)束
臨界.進(jìn)入 ()
并發(fā)線程數(shù) = 到整數(shù) (編輯框_并發(fā)線程數(shù).內(nèi)容)
臨界.退出 ()
.如果真 (并發(fā)線程數(shù) < 1)
并發(fā)線程數(shù) = 1
.如果真結(jié)束
bool = 線程池.創(chuàng)建 (并發(fā)線程數(shù))
.如果真 (bool = 假)
臨界.進(jìn)入 ()
按鈕_開(kāi)始停止.標(biāo)題 = “開(kāi)始驗(yàn)證”
按鈕_開(kāi)始停止.禁止 = 假
臨界.退出 ()
返回 ()
.如果真結(jié)束
臨界.進(jìn)入 ()
按鈕_開(kāi)始停止.標(biāo)題 = “停止驗(yàn)證”
按鈕_開(kāi)始停止.禁止 = 假
按鈕_暫停繼續(xù).標(biāo)題 = “暫停驗(yàn)證”
按鈕_暫停繼續(xù).禁止 = 假
len = 列表_代理.取表項(xiàng)數(shù) () - 1 ' 列表索引從0開(kāi)始
臨界.退出 ()
i = 0
.判斷循環(huán)首 (i ≤ len)
空閑線程數(shù) = 線程池.取_空閑線程數(shù) ()
.如果真 (空閑線程數(shù) > 0)
int = len - i + 1
.如果真 (int > 空閑線程數(shù))
int = 空閑線程數(shù)
.如果真結(jié)束
.計(jì)次循環(huán)首 (int, )
線程池.投遞任務(wù) (&驗(yàn)證子程序, i)
i = i + 1
.計(jì)次循環(huán)尾 ()
.如果真結(jié)束
bool = 線程池.等待任務(wù)動(dòng)態(tài) ()
.如果真 (bool = 假) ' 返回假 表示線程池被執(zhí)行銷(xiāo)毀 也表示用戶手動(dòng)點(diǎn)了停止
返回 ()
.如果真結(jié)束
更新?tīng)顟B(tài)條 ()
.判斷循環(huán)尾 ()
' 等待剩余任務(wù)執(zhí)行完畢
.判斷循環(huán)首 (線程池.取_是否空閑 () = 假)
.如果真 (線程池.取_狀態(tài) () ≠ #線程池_正在工作)
返回 ()
.如果真結(jié)束
bool = 線程池.等待任務(wù)動(dòng)態(tài) (100)
.如果真 (bool = 真)
更新?tīng)顟B(tài)條 ()
.如果真結(jié)束
.判斷循環(huán)尾 ()
更新?tīng)顟B(tài)條 ()
' 執(zhí)行停止
臨界.進(jìn)入 ()
按鈕_開(kāi)始停止.禁止 = 真
按鈕_開(kāi)始停止.標(biāo)題 = “正在停止”
按鈕_暫停繼續(xù).禁止 = 真
按鈕_暫停繼續(xù).標(biāo)題 = “暫停驗(yàn)證”
臨界.退出 ()
線程池.銷(xiāo)毀 (0)
信息框 (“驗(yàn)證完畢!” + #換行符 + “有效代理:” + 到文本 (有效數(shù)量) + #換行符 + “失效代理:” + 到文本 (失效數(shù)量), 64 + 65536, )
臨界.進(jìn)入 ()
按鈕_開(kāi)始停止.標(biāo)題 = “開(kāi)始驗(yàn)證”
按鈕_開(kāi)始停止.禁止 = 假
臨界.退出 ()
.子程序 驗(yàn)證子程序
.參數(shù) i, 整數(shù)型
.局部變量 ip地址, 文本型
.局部變量 端口, 文本型
.局部變量 http, WinHttp
.局部變量 str, 文本型
.局部變量 time, 整數(shù)型
.局部變量 timing, 整數(shù)型
.局部變量 bool, 邏輯型
.如果真 (線程池.取_狀態(tài) () ≠ #線程池_正在工作)
返回 ()
.如果真結(jié)束
臨界.進(jìn)入 ()
ip地址 = 列表_代理.取標(biāo)題 (i, 1)
端口 = 列表_代理.取標(biāo)題 (i, 2)
臨界.退出 ()
.如果真 (ip地址 = “” 或 端口 = “”)
原子_遞增 (已完成數(shù)量)
返回 ()
.如果真結(jié)束
time = 取啟動(dòng)時(shí)間 ()
http.SetProxy (2, ip地址 + “:” + 端口)
http.SetTimeouts (連接超時(shí), 連接超時(shí), 驗(yàn)證超時(shí), 驗(yàn)證超時(shí))
http.Open (“GET”, 驗(yàn)證網(wǎng)址, 真)
http.Set_User_Agent ()
http.Send ()
timing = 驗(yàn)證超時(shí) \ 1000 + 選擇 (驗(yàn)證超時(shí) % 1000 > 0, 1, 0)
.計(jì)次循環(huán)首 (timing, ) ' 這樣寫(xiě)是為了能快速相應(yīng)停止
bool = http.WaitForResponse (1) ' 單位 秒
.如果真 (bool = 真)
跳出循環(huán) ()
.如果真結(jié)束
.如果真 (線程池.取_狀態(tài) () ≠ #線程池_正在工作) ' 當(dāng)用戶手動(dòng)停止時(shí) 線程池狀態(tài)就變了 這樣就能觸發(fā)返回了
http.Abort () ' 終止連接
原子_遞增 (已完成數(shù)量)
返回 ()
.如果真結(jié)束
.計(jì)次循環(huán)尾 ()
time = 取啟動(dòng)時(shí)間 () - time ' 算出超時(shí)
.判斷開(kāi)始 (bool = 真)
.判斷開(kāi)始 (是否UTF解碼 = 真)
str = http.GetResponseTextUtf8 ()
.默認(rèn)
str = http.GetResponseText ()
.判斷結(jié)束
.默認(rèn)
http.Abort ()
.判斷結(jié)束
.判斷開(kāi)始 (str = “”)
原子_遞增 (失效數(shù)量)
設(shè)置表象 (i, “*/*”, 選擇 (time > 連接超時(shí), “驗(yàn)證失敗”, “連接超時(shí)”), 2)
.判斷 (尋找文本 (str, 驗(yàn)證字符串, , 假) ≠ -1)
原子_遞增 (有效數(shù)量)
設(shè)置表象 (i, 到文本 (time), “驗(yàn)證成功”, 選擇 (time < 10000, 1, 3))
.默認(rèn)
原子_遞增 (失效數(shù)量)
設(shè)置表象 (i, “*/*”, “驗(yàn)證失敗”, 2)
.判斷結(jié)束
原子_遞增 (已完成數(shù)量)
.子程序 設(shè)置表象
.參數(shù) index, 整數(shù)型
.參數(shù) time, 文本型
.參數(shù) stop, 文本型
.參數(shù) State, 整數(shù)型
臨界.進(jìn)入 ()
列表_代理.置標(biāo)題 (index, 3, time)
列表_代理.置標(biāo)題 (index, 4, stop)
列表_代理.置狀態(tài)圖片 (index, State)
.如果真 (index > 保證顯示索引)
列表_代理.保證顯示 (index + 1)
保證顯示索引 = index + 1
.如果真結(jié)束
臨界.退出 ()
.子程序 更新?tīng)顟B(tài)條
臨界.進(jìn)入 ()
狀態(tài)條_狀態(tài).置文本 (1, “已完成驗(yàn)證:” + 到文本 (已完成數(shù)量))
狀態(tài)條_狀態(tài).置文本 (2, “有效代理數(shù):” + 到文本 (有效數(shù)量))
狀態(tài)條_狀態(tài).置文本 (3, “失效代理數(shù):” + 到文本 (失效數(shù)量))
臨界.退出 ()
.子程序 __主窗口_將被銷(xiāo)毀
線程池.銷(xiāo)毀 ()
' 防止用戶意外點(diǎn)擊紅叉叉
運(yùn)行結(jié)果:

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
易語(yǔ)言數(shù)據(jù)庫(kù)操作中“取當(dāng)前索引”命令詳解
在本篇文章里小編給大家分享了關(guān)于易語(yǔ)言數(shù)據(jù)庫(kù)操作中“取當(dāng)前索引”命令詳解,需要的朋友們可以參考下。2020-04-04
易語(yǔ)言注冊(cè)自定義協(xié)議Register protocol
今天小編就為大家分享一篇關(guān)于易語(yǔ)言注冊(cè)自定義協(xié)議Register protocol,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-11-11

