網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告_第1頁(yè)
網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告_第2頁(yè)
網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告_第3頁(yè)
網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告_第4頁(yè)
網(wǎng)絡(luò)編程實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)報(bào)告內(nèi)容:FTP客戶端程序設(shè)計(jì)實(shí)驗(yàn)課程名稱 網(wǎng)絡(luò)編程 班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)1001班

實(shí)驗(yàn)項(xiàng)目名稱 等應(yīng)用程序 指導(dǎo)老師 XXXXX

姓名 郭維維 學(xué)

號(hào) 100102060146 評(píng)

分 、實(shí)驗(yàn)?zāi)康?、熟悉java中網(wǎng)絡(luò)編程的方法;2、復(fù)習(xí)圖形用戶界面的設(shè)計(jì)方法;3、復(fù)習(xí)事件監(jiān)聽器的使用;4、復(fù)習(xí)輸入、輸出流的創(chuàng)建和封裝方法;實(shí)驗(yàn)內(nèi)容和原理按要求設(shè)計(jì)圖形用戶界面,編寫實(shí)現(xiàn)類似于FTP功能的程序。在界面的TextField中輸入一個(gè)網(wǎng)址,點(diǎn)擊“鏈接”按鈕時(shí),客戶端與服務(wù)器建立連接,點(diǎn)擊“斷開”按鈕時(shí)鏈接斷開。當(dāng)點(diǎn)擊“發(fā)送請(qǐng)求”按鈕時(shí),向服務(wù)器發(fā)送字符串“l(fā)s”,服務(wù)器將特定目錄下的文件名發(fā)送到客戶端,并在TextArea中顯示,然后客戶端根據(jù)接收到的文件名,在TestField中輸入文件名,然后點(diǎn)擊“下載文件”按鈕,從服務(wù)器端下載指定的文件,并保存在指定目錄的文件中。

三、實(shí)驗(yàn)的環(huán)境該程序在客戶端繼承了Applet類來(lái)實(shí)現(xiàn)圖形用戶界面,在布局上利用了Panel面板,為面板對(duì)象創(chuàng)建了FlowLayout流式對(duì)象,為Applet創(chuàng)建了BorderLayout布局,將各個(gè)控件添加到面板上,并為按鈕控件添加事件監(jiān)聽器,響應(yīng)按鈕點(diǎn)擊事件。在服務(wù)器端,首先創(chuàng)建了一個(gè)ServerSocket對(duì)象,然后通過(guò)其對(duì)象調(diào)用accept()方法,返回一個(gè)Socket對(duì)象,于是服務(wù)器處于監(jiān)聽狀態(tài)。在客戶端,當(dāng)點(diǎn)擊“連接”按鈕時(shí),由類TextField的方法getText()獲得輸入的IP地址,然后根據(jù)輸入的IP創(chuàng)建Socket對(duì)象。當(dāng)點(diǎn)擊“斷開”按鈕時(shí),調(diào)用Socket類中的close()方法,關(guān)閉套接字。當(dāng)點(diǎn)擊“發(fā)送請(qǐng)求”按鈕時(shí),通過(guò)套接字的對(duì)象調(diào)用getInputStream()方法和getOutputStream()方法,獲得輸入、輸出流,并對(duì)流進(jìn)行包裝,然后利用輸出流向服務(wù)器發(fā)送字符串“l(fā)s”。當(dāng)服務(wù)器接收到“l(fā)s”字符串時(shí),就在當(dāng)前內(nèi)目錄下創(chuàng)建文件對(duì)象,并利用文件類中的list()方法獲得當(dāng)前目錄下的文件名,并將獲得的文件名發(fā)送到客戶端,客戶端在接收到文件名時(shí),就將文件名追加到TextArea的末尾。然后從鍵盤輸入要下載的文件名,點(diǎn)擊“下載文件”按鈕,將輸入的文件名發(fā)送到服務(wù)器。當(dāng)服務(wù)器接收到要下載的文件名時(shí),通過(guò)創(chuàng)建文件流對(duì)象,將文件的內(nèi)容發(fā)生到客戶端??蛻舳耸紫葎?chuàng)建一個(gè)文件對(duì)象,和文件輸入流,將讀取到的文件保存起來(lái)。當(dāng)讀取完畢后關(guān)閉流對(duì)象。程序客戶端核心代碼:importjava.awt.event.*;importjava.awt.*;import.Socket;importjava.io.*;publicclassFTP_13extendsjava.applet.AppletimplementsActionListener{//繼承Applet類,實(shí)現(xiàn)圖形用戶界面Labelserver=newLabel("輸入服務(wù)器IP:");TextFieldIP=newTextField("",30);Buttonlink=newButton("連接");Buttondown=newButton("斷開");Buttonrequst=newButton("發(fā)送請(qǐng)求");Buttonload=newButton("下載文件");TextAreafilelist=newTextArea();TextFieldinputfile=newTextField(50);Panelpal1,pal2,pal3;FlowLayoutflo;//設(shè)計(jì)圖形用戶界面publicvoidinit(){setLayout(newBorderLayout(100,100));pal1=newPanel();pal2=newPanel();pal3=newPanel();flo=newFlowLayout();//創(chuàng)建了三個(gè)Panel面板和一個(gè)流式布局pal1.setLayout(flo);pal2.setLayout(flo);pal3.setLayout(flo);pal1.add(server);pal1.add(IP);pal1.add(link);pal1.add(down);add(pal1,"North");pal2.add(filelist);pal2.add(requst);add(pal2,"Center");pal3.add(inputfile);pal3.add(load);add(pal3,"South");link.addActionListener(this);//為按鈕注冊(cè)事件監(jiān)聽器down.addActionListener(this);requst.addActionListener(this);load.addActionListener(this);}Socketcs;Stringipadd;Stringfilename;Stringloadfilename;publicvoidactionPerformed(ActionEvente){//事件響應(yīng)函數(shù) try{ if(e.getSource()==link)//點(diǎn)擊“連接”按鈕時(shí),根據(jù)輸入 { ipadd=IP.getText(); //的IP地址創(chuàng)建套接字Socket cs=newSocket(ipadd,5678); } if(e.getSource()==down)//點(diǎn)擊“斷開”按鈕時(shí),關(guān)閉套接字 { cs.close(); } //點(diǎn)擊“連接請(qǐng)求”按鈕時(shí),向服務(wù)器發(fā)送“l(fā)s”字符串 if(e.getSource()==requst) {//由Socket類中的getOutputStream()方法獲得輸出流,并對(duì)流進(jìn)行封裝PrintWriterwout=newPrintWriter(cs.getOutputStream()); wout.println("ls");wout.flush();//由Socket類中的getInputStream()方法獲得輸入流,并對(duì)流進(jìn)行封裝 BufferedInputStreamrin=newBufferedInputStream(cs.getInputStream()); byte[]buffer=newbyte[256]; inta=rin.read(buffer,0,256); while(a!=-1) { loadfilename=newString(buffer); loadfilename.trim();//將byte數(shù)組中多余的空格去掉 filelist.append(loadfilename);//將讀到的文件名追加到TextArea中 filelist.append("\n"); a=rin.read(buffer,0,256); } rin.close();//關(guān)閉流 } //當(dāng)點(diǎn)擊“下載文件”按鈕時(shí),將輸入的文件從服務(wù)器下載到客戶端的指定目錄的文件中 if(e.getSource()==load) {//由Socket類中的getOutputStream()方法獲得輸出流,并對(duì)流進(jìn)行封裝OutputStreamWriterwout=newOutputStreamWriter(cs.getOutputStream()); filename=inputfile.getText(); wout.write(filename);//將輸入的文件名發(fā)送到服務(wù)器//由Socket類中的getInputStream()方法獲得輸入流,并對(duì)流進(jìn)行封裝BufferedReaderbuf=newBufferedReader(newInputStreamReader(cs.getInputStream())); Filefile=newFile("E:\\loadfile.txt");//將下載的文件保存在E盤//創(chuàng)建文件流對(duì)象 FileWriterfileout=newFileWriter(file); Stringtext; text=buf.readLine(); while(text!=null)//從服務(wù)器讀文件并將文件保存在客戶端的指定文件中 {fileout.write(text); text=buf.readLine(); } fileout.close(); } }catch(IOExceptionee){ }}}服務(wù)器端核心代碼:import.*;importjava.io.*;publicclassFTP_Server{publicstaticvoidmain(String[]args){ServerSockets=null;try{//創(chuàng)建一個(gè)ServerSocket在端口5678監(jiān)聽客戶請(qǐng)求 s=newServerSocket(5678);}catch(IOExceptione){}while(true){ try{ Socketcs=s.accept();//使用accept()阻塞等待客戶請(qǐng)求 System.out.println("創(chuàng)建"); //由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象BufferedReaderbufin=newBufferedReader(newInputStreamReader(cs.getInputStream())); //由Socket對(duì)象得到輸出流,并構(gòu)造BufferedWriter對(duì)象 PrintWriterwout=newPrintWriter(cs.getOutputStream()); Stringstr=bufin.readLine();//讀取客戶端發(fā)來(lái)的信息 System.out.println(str); if(str.equals("ls")) { Filepath=newFile(".");//在當(dāng)前目錄下創(chuàng)建File對(duì)象 String[]list=path.list();//獲得當(dāng)前目錄下的文件名和子目錄名 for(inti=0;i<list.length;i++) { wout.write(list[i]); wout.flush(); System.out.println(list[i]); } //將文件名和子目錄名發(fā)送到客戶端 } //從客戶端獲得要下載的文件名 Stringfilename=bufin.readLine(); FileReaderfilein=newFileReader(filename);//創(chuàng)建文件輸出流對(duì)象 intc; while((c=filein.read())!=-1) wout.write(c);//將文件發(fā)送過(guò)去 }catch(IOExceptione){}}}}結(jié)果及分析1)測(cè)試數(shù)據(jù)2)實(shí)驗(yàn)的現(xiàn)象在客戶端的TextField中輸入一個(gè)網(wǎng)址,點(diǎn)擊“鏈接”按鈕時(shí),客戶端與服務(wù)器建立連接,點(diǎn)擊“斷開”按鈕時(shí)鏈接斷開。當(dāng)點(diǎn)擊“發(fā)送請(qǐng)求”按鈕時(shí),向服務(wù)器發(fā)送字符串“l(fā)s”,服務(wù)器將特定目錄下的文件名發(fā)送到客戶端,并在TextArea中顯示,然后客戶端根據(jù)接收到的文件名,在TestField中輸入文件名,然后點(diǎn)擊“下載文件”按鈕,從服務(wù)器端下載指定的文件,并保存在指定目錄的文件中。2)實(shí)驗(yàn)數(shù)據(jù)的處理首先運(yùn)行服務(wù)器,在服務(wù)器端創(chuàng)建一個(gè)ServerSocket對(duì)象,然后通過(guò)調(diào)用類中的accept()方法使服務(wù)器處于監(jiān)聽客戶端請(qǐng)求的狀態(tài),再運(yùn)行客戶端,在客戶端的TextField中輸入一個(gè)網(wǎng)址,點(diǎn)擊“鏈接”按鈕時(shí),客戶端創(chuàng)建Scoket對(duì)象與服務(wù)器建立連接,點(diǎn)擊“斷開”按鈕時(shí)調(diào)用Socket的close()方法鏈接斷開。當(dāng)點(diǎn)擊“發(fā)送請(qǐng)求”按鈕時(shí),向服務(wù)器發(fā)送字符串“l(fā)s”,服務(wù)器將特定目錄下的文件名發(fā)送到客戶端,并追加在TextArea中顯示,然后客戶端根據(jù)接收到的文件名,在TestField中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論