| httpwebrequest hwr=(httpwebrequest)webrequest.create(http://www.163.com/); |
![]() |
| 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; |
| 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ù) |
| 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; } } |
| 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<thread;i++) { threadw[i]=false;//每個(gè)線程狀態(tài)的初始值為假 filenamew[i]=i.tostring ()+".dat";//每個(gè)線程接收文件的臨時(shí)文件名 if (i<thread-1) { filestartw[i]=filethread*i;//每個(gè)線程接收文件的起始點(diǎn) filesizew[i]=filethread-1;//每個(gè)線程接收文件的長(zhǎng)度 } else { filestartw[i]=filethread*i; filesizew[i]=filethreade-1; } } //定義線程數(shù)組,啟動(dòng)接收線程 thread[] threadk=new thread [thread]; httpfile[] httpfile=new httpfile [thread]; for (int j=0;j<thread;j++) { httpfile[j]=new httpfile(this,j); threadk[j]=new thread(new threadstart (httpfile[j].receive )); threadk[j].start (); } //啟動(dòng)合并各線程接收的文件線程 thread hbth=new thread (new threadstart (hbfile)); hbth.start (); } |
| public void hbfile() { while (true)//等待 { hb=true; for (int i=0;i<thread;i++) { if (threadw[i]==false)//有未結(jié)束線程,等待 { hb=false; thread.sleep (100); break; } } if (hb==true)//所有線程均已結(jié)束,停止等待, { break; } } filestream fs;//開(kāi)始合并 filestream fstemp; int readfile; byte[] bytes=new byte[512]; fs=new filestream (textbox3.text .trim ().tostring (),system.io.filemode.create); for (int k=0;k<thread;k++) { fstemp=new filestream (filenamew[k],system.io.filemode .open); while (true) { readfile=fstemp.read (bytes,0,512); if (readfile>0) { fs.write (bytes,0,readfile); } else { break; } } fstemp.close (); } fs.close (); datetime dt=datetime.now; textbox1.text =dt.tostring ();//結(jié)束時(shí)間 messagebox.show ("接收完畢!!!"); } |
新聞熱點(diǎn)
疑難解答
圖片精選