![TCP通信功能實(shí)現(xiàn)計(jì)算機(jī)課程設(shè)計(jì)說明書_第1頁](http://file4.renrendoc.com/view/9ec25014d308655348b24415e8733e83/9ec25014d308655348b24415e8733e831.gif)
![TCP通信功能實(shí)現(xiàn)計(jì)算機(jī)課程設(shè)計(jì)說明書_第2頁](http://file4.renrendoc.com/view/9ec25014d308655348b24415e8733e83/9ec25014d308655348b24415e8733e832.gif)
![TCP通信功能實(shí)現(xiàn)計(jì)算機(jī)課程設(shè)計(jì)說明書_第3頁](http://file4.renrendoc.com/view/9ec25014d308655348b24415e8733e83/9ec25014d308655348b24415e8733e833.gif)
![TCP通信功能實(shí)現(xiàn)計(jì)算機(jī)課程設(shè)計(jì)說明書_第4頁](http://file4.renrendoc.com/view/9ec25014d308655348b24415e8733e83/9ec25014d308655348b24415e8733e834.gif)
![TCP通信功能實(shí)現(xiàn)計(jì)算機(jī)課程設(shè)計(jì)說明書_第5頁](http://file4.renrendoc.com/view/9ec25014d308655348b24415e8733e83/9ec25014d308655348b24415e8733e835.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
編號(hào):計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)說明書題目:TCP通信功能實(shí)現(xiàn)系別:計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè):學(xué)生姓名:學(xué)號(hào):指導(dǎo)教師:
摘要TCP/IP協(xié)議是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。定義了電子設(shè)備連入因特網(wǎng)的規(guī)范。而Socket通信就是基于TCP/IP協(xié)議的一直通信機(jī)制。TCP/IP網(wǎng)絡(luò)中最常用的傳輸協(xié)議TCP和UDP。傳輸層通常以TCP和UDP協(xié)議來控制端點(diǎn)到端點(diǎn)的通信。Socket定義了通信的端點(diǎn),是由IP地址和端口號(hào)組成。JAVA語言已經(jīng)成為現(xiàn)今網(wǎng)絡(luò)應(yīng)用中最廣泛的語言,本文就是介紹JAVA中的Socket套接字以及通信的實(shí)現(xiàn)。關(guān)鍵字:JAVASOCKET,TCP/IP,套接字,網(wǎng)絡(luò)編程目錄計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì) 1說明書 1一、設(shè)計(jì)任務(wù) 3二、總體設(shè)計(jì) 3(一)TCP/IP協(xié)議介紹 3(二)JAVA語言網(wǎng)絡(luò)編程的優(yōu)勢(shì) 3(三)JAVA中的ServerSocket類與Socket類 4三、測(cè)試 5(1)服務(wù)器端 5(2)客戶端 6(3)控制面板相關(guān)信息提示 7(4)功能實(shí)現(xiàn) 7四、設(shè)計(jì)總結(jié) 8(一)總評(píng) 8(二)遇到的問題以及解決方案 8五、使用說明 8六、附錄(代碼程序) 9七、參考文獻(xiàn) 21一、設(shè)計(jì)任務(wù)能實(shí)現(xiàn)客戶端和服務(wù)器端之間文件的傳輸。服務(wù)器端口能實(shí)現(xiàn)目標(biāo)文件瀏覽,并將所選擇的文件作為發(fā)送文件。客戶端能實(shí)現(xiàn)保存路徑的瀏覽,默認(rèn)情況下將接受文件存放在一定路徑??蛻舳撕头?wù)器端能有簡單的圖形界面。二、總體設(shè)計(jì)采用TCP進(jìn)行通訊,需要服務(wù)器和客戶端兩個(gè)部分,因此需要FileServer和FileClient兩個(gè)部分,兩個(gè)文件的IP地址和端口都是程序指定的。運(yùn)用JAVA語言,在Eclipese應(yīng)用程序中進(jìn)行代碼編寫。(一)TCP/IP協(xié)議介紹TCP/IP是TransmissionControlProtocol/InternetProtocol的簡寫,中文譯為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又叫做網(wǎng)絡(luò)通訊協(xié)議,由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成,是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。TCP/IP定義了電子設(shè)備連入因特網(wǎng)的規(guī)范,以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。該協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。(二)JAVA語言網(wǎng)絡(luò)編程的優(yōu)勢(shì)Java語言是現(xiàn)今使用最為廣泛的編程語言,它的日益流行,尤其是Java與IntemetWeb的密切結(jié)合,使JAVA語言在全球取得了巨大的成功。Java語言的多平臺(tái)、面向?qū)ο?、繼承、封裝、分布式、多線程及完善的安全機(jī)制等特色,成為現(xiàn)代信息系統(tǒng)建設(shè)與日常應(yīng)用中的良好的開發(fā)平臺(tái)和運(yùn)行環(huán)境。Java語言是基于網(wǎng)絡(luò)計(jì)算的語言,網(wǎng)絡(luò)應(yīng)用是Java語言的重要應(yīng)用之一。Java提供的類庫支持TCP/IP協(xié)議,應(yīng)用程序可通過URL地址,在訪問網(wǎng)絡(luò)上任何地方的對(duì)象時(shí),如同訪問本地文件一樣簡單。(三)JAVA中的ServerSocket類與Socket類圖3Java程序中Socket通信流程示意圖三、測(cè)試(1)服務(wù)器端圖4服務(wù)器端界面圖5文件瀏覽界面說明:文件選擇:能打開Window下的文件瀏覽,選擇自己想要發(fā)送的文件,并能將文件名以及所在路徑分別顯示在兩個(gè)文本框中(圖5)。點(diǎn)擊建立連接:打開服務(wù)器,建立網(wǎng)絡(luò)連接。如若沒有打開服務(wù)器客戶端無法連接到網(wǎng)絡(luò)。(2)客戶端圖6客戶端界面說明: 選擇路徑:選擇接受文件保存的路徑,如果沒有選擇路徑時(shí),則默認(rèn)保存在D盤目錄下。 點(diǎn)擊建立連接:點(diǎn)擊后,則打開IP網(wǎng)絡(luò)連接,如果服務(wù)器端沒有連接時(shí),則會(huì)拋出拒絕網(wǎng)絡(luò)連接異常:.ConnectException:Connectionrefused(如圖7)。圖7.ConnectException異常(3)控制面板相關(guān)信息提示在控制面板中會(huì)有相關(guān)信息顯示,便于在使用者能更好的了解該程序。(4)功能實(shí)現(xiàn)該TCP通信系統(tǒng)能夠?qū)崿F(xiàn)服務(wù)器端向客戶端傳送文件的功能,對(duì)于文件的類型以及大小都沒有要求(如圖8)。測(cè)試發(fā)送文件包含了PNG圖像、WORD文檔、EXE應(yīng)用程序、txt文本。圖8接受文件列表四、設(shè)計(jì)總結(jié)(一)總評(píng)在現(xiàn)今互聯(lián)網(wǎng)飛速發(fā)展的今天,網(wǎng)絡(luò)通信發(fā)展的越來越迅速,所覆蓋的范圍也越來越廣泛,作為計(jì)算機(jī)相關(guān)專業(yè)的我們,更是感受到了互聯(lián)網(wǎng)的強(qiáng)大力量,了解網(wǎng)絡(luò)傳輸?shù)脑砀莿?shì)在必行。通過此次計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì),幫我回憶、鞏固了上學(xué)期的計(jì)算機(jī)網(wǎng)絡(luò)知識(shí),并且通過課程設(shè)計(jì),將理論知識(shí)運(yùn)用于實(shí)踐當(dāng)中來。同時(shí)JavaSocket網(wǎng)絡(luò)編程的應(yīng)用越來越廣泛,其高效性,快捷性也得到了廣大的軟件開發(fā)商的喜愛,作為一種底層通信的先進(jìn)開發(fā)手段,它在TCP,UDP,URL等網(wǎng)絡(luò)通信方面的優(yōu)勢(shì)更加突出,因此選擇了JAVA作為此次課程設(shè)計(jì)的開發(fā)語言。此次計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)我選擇了TCP通信,主要是實(shí)現(xiàn)服務(wù)器端和客戶端之間文件傳輸。TCP通信要求服務(wù)器端要處于監(jiān)聽階段,即要先打開服務(wù)器端。TCP要求服務(wù)器端和客戶端都處于連接狀態(tài)才能完成文件的傳送,如果有一方斷開則會(huì)停止傳送。(二)遇到的問題以及解決方案 1.一開始對(duì)于服務(wù)器端和客戶端理解不夠透徹,于是先打開客戶端在打開服務(wù)器端,結(jié)果拋出網(wǎng)絡(luò)連接異常。后面通過查找資料后,明白錯(cuò)誤的原由,在接下來的操作中,避免了異常拋出。 2.拋出java.io.FileNotFoundException:D:\接收文件(拒絕訪問。)異常。后面通過資料的查閱,發(fā)現(xiàn)是因?yàn)樵谖募邮?,新建文件中,文件名與路徑名之間的錯(cuò)誤使用,導(dǎo)致異常拋出。具體代碼如下:FileOutputStreamfos1=newFileOutputStream(FileClientFrm.getpath());Getpath()函數(shù)的返回值路徑,因此出現(xiàn)錯(cuò)誤。解決方法是將代碼程序修改為:FileOutputStreamfos1=newFileOutputStream(FileClientFrm.getpath()+fileName);五、使用說明打開服務(wù)器端,點(diǎn)擊“文件選擇”選擇要發(fā)送的文件—>點(diǎn)擊“建立連接”,調(diào)用SendFileServer.server()函數(shù),打開服務(wù)器監(jiān)聽打開客戶端口,可選“選擇路徑”按鈕,選擇文件保存路徑,以及另存為文件名稱;直接點(diǎn)擊“建立連接”,則默認(rèn)保存在D盤目錄下。文件傳送成功。在服務(wù)器端控制面板上會(huì)顯示文件發(fā)送結(jié)束,表示文件傳輸成功。六、附錄(代碼程序)//服務(wù)器端代碼importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;importjava.awt.FileDialog;importjava.awt.TextArea;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.OutputStream;import.ServerSocket;import.Socket;importjava.util.Scanner;//各種包的導(dǎo)入publicclassFileServer{ publicstaticvoidmain(Stringargs[]) { FileServerFrmfrm=newFileServerFrm(); //newFileServer(); }}classFileServerFrmextendsJFrameimplementsActionListener{ FileDialogop;//文件數(shù)據(jù)類 staticJTextFieldtarea1=newJTextField(); staticJTextFieldtarea2=newJTextField(); JFramejf=newJFrame("服務(wù)器端"); JLabellab=newJLabel("要發(fā)送的文件名稱是:"); JButtonFilechooce=newJButton("文件選擇"); JButtonlink=newJButton("點(diǎn)擊建立連接");//圖形界面設(shè)計(jì)(控件定義) staticStringgetname() { returntarea1.getText(); } staticStringgetpath() { returntarea2.getText(); }//文件打開 publicFileServerFrm() { super("打開和保存文件"); //圖形界面設(shè)計(jì)(添加控件) jf.setSize(600,400); jf.setLayout(null); jf.add(Filechooce); jf.add(link); jf.add(tarea1); jf.add(tarea2); jf.add(lab); Filechooce.setLocation(400,200); Filechooce.setSize(100,30); link.setLocation(100,250); link.setSize(300,50); lab.setLocation(20,10); lab.setSize(300,50); tarea1.setLocation(50,70); tarea1.setSize(500,50); tarea2.setLocation(50,140); tarea2.setSize(500,50); jf.setVisible(true); jf.setResizable(true); op=newFileDialog(this,"打開",FileDialog.LOAD); Filechooce.addActionListener(this); link.addActionListener(this); addWindowListener ( newWindowAdapter(){ publicvoidwindowClosing(WindowEvente) { System.exit(0); } } ); } //SendFileServer.server(); publicvoidactionPerformed(ActionEvente) { if(e.getSource()==Filechooce) { Stringstr,str1,str2; op.setVisible(true); try { Filef1=newFile(op.getDirectory(),op.getFile()); FileReaderfr=newFileReader(f1); BufferedReaderbr=newBufferedReader(fr); tarea1.setText(""); tarea2.setText(""); str1=f1.getName(); str2=f1.getPath(); while((str=br.readLine())!=null) { tarea1.setText(str1+'\n'); tarea2.setText(str2+'\n'); } fr.close(); } catch(Exceptione1) {} System.out.println("Fileissend."); } elseif(e.getSource()==link) { System.out.println("建立連接."); SendFileServer.server(); } } }importjava.awt.FileDialog;importjava.awt.TextArea;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileReader;importjava.io.IOException;importjava.io.OutputStream;import.ServerSocket;import.Socket;importjava.util.Scanner;/**用TCP進(jìn)行文件傳輸*此文件為服務(wù)器文件*當(dāng)接受到客戶端的請(qǐng)求之后,先向其傳輸文件名*當(dāng)客戶端接受完畢之后,向客戶端傳輸文件**/importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassSendFileServerimplementsRunnable{ //服務(wù)器監(jiān)聽端口 privatestaticfinalintMONITORPORT=12345; privateSockets; publicSendFileServer(Sockets){ super(); this.s=s; } publicstaticvoidserver() { try{ //創(chuàng)建服務(wù)器socket ServerSocketss=newServerSocket(MONITORPORT); while(true) { //接收到一個(gè)客戶端連接之后,創(chuàng)建一個(gè)新的線程進(jìn)行服務(wù) //并將聯(lián)通的socket傳給該線程 Sockets=ss.accept(); newThread(newSendFileServer(s)).start(); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicvoidrun(){ //TODOAuto-generatedmethodstub byte[]buf=newbyte[100]; OutputStreamos=null; FileInputStreamfins=null; try{ os=s.getOutputStream(); //文件路徑 StringfilePath=FileServerFrm.getpath();//獲取選擇的文件所在路徑 //文件名 StringfileName=FileServerFrm.getname();//獲取選擇的文件名 System.out.println("將文件名:"+fileName+"傳輸過去"); //先將文件名傳輸過去 os.write(fileName.getBytes()); System.out.println("文件名是:"+FileServerFrm.getname()); System.out.println("路徑是:"+FileServerFrm.getpath()); System.out.println("開始傳輸文件"); //將文件傳輸過去 //獲取文件 fins=newFileInputStream(filePath); intdata; //通過fins讀取文件,并通過os將文件傳輸 while(-1!=(data=fins.read())) { os.write(data); } System.out.println("文件傳輸結(jié)束"); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally { try{ if(fins!=null)fins.close(); if(os!=null) os.close(); this.s.close(); }catch(IOExceptione){ e.printStackTrace(); } } } privateObjectactionPerformed(){ //TODOAuto-generatedmethodstub returnnull; }}//客戶端程序importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;importjava.awt.FileDialog;importjava.awt.TextArea;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.OutputStream;import.ServerSocket;import.Socket;importjava.util.Scanner;publicclassFileClient{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub FileClientFrmFileClient=newFileClientFrm(); }}classFileClientFrmextendsJFrameimplementsActionListener{ FileDialogop; staticFileDialogsv; staticJTextFieldtarea1=newJTextField(); staticJTextFieldtarea2=newJTextField(); JFramejf=newJFrame("客戶端界面"); JLabellab=newJLabel("保存的文件名和路徑"); JButtonFilechooce=newJButton("選擇路徑"); JButtonlink=newJButton("點(diǎn)擊建立連接");//客戶端圖形界面設(shè)計(jì)(控件定義) staticStringgetname() { returnsv.getFile(); } staticStringgetpath() { returnsv.getDirectory(); } publicFileClientFrm() { super("打開和保存文件"); //界面圖形界面設(shè)計(jì)(控件添加、位置設(shè)計(jì)) jf.setSize(600,400); jf.setLayout(null); jf.add(Filechooce); jf.add(link); jf.add(tarea1); jf.add(tarea2); jf.add(lab); Filechooce.setLocation(400,200); Filechooce.setSize(100,30); link.setLocation(100,250); link.setSize(300,50); lab.setLocation(20,10); lab.setSize(300,50); tarea1.setLocation(50,70); tarea1.setSize(500,50); tarea2.setLocation(50,140); tarea2.setSize(500,50); jf.setVisible(true); jf.setResizable(true); //保存路徑 op=newFileDialog(this,"打開",FileDialog.LOAD); Filechooce.addActionListener(this); link.addActionListener(this); addWindowListener ( newWindowAdapter(){ publicvoidwindowClosing(WindowEvente) { System.exit(0); } } ); } publicvoidactionPerformed(ActionEvente) { if(e.getSource()==Filechooce) { Stringstr,str1,str2; sv.setVisible(true);//打開保存窗口 try { Filef1=newFile(sv.getDirectory(),sv.getFile()); str1=sv.getFile(); str2=sv.getDirectory(); System.out.println("Fileissavein"+str2); tarea1.setText("文件名是:"+str1); tarea2.setText("路徑名"+str2); } catch(Exceptione1) {} //System.out.println("Fileissave."); } elseif(e.getSource()==link) { System.out.println("建立連接."); SendFileClientclient=newSendFileClient(); } } }importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;import.InetSocketAddress;import.Socket;/**用TCP進(jìn)行文件傳輸*此文件為客戶端文件*連接上服務(wù)器之后,直接接受文件***/publicclassSendFileClient{ privatestaticfinalStringSERVERIP="03";//IP地址 privatestaticfinalintSERVERPORT=12345; privatestaticfinalintCLIENTPORT=54321; SendFileClient(){ //TODOAuto-generatedmethodstub //用來接受傳輸過來的字符 byte[]buf=new
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)八年級(jí)上冊(cè)《實(shí)驗(yàn)與探究三角形中邊與角之間的不等關(guān)系》聽評(píng)課記錄
- 魯教版歷史六年級(jí)上冊(cè)第5課《夏、商、西周的興亡》聽課評(píng)課記錄
- 魯人版道德與法治九年級(jí)下冊(cè)13.1《綠水青山就是金山銀山》聽課評(píng)課記錄1
- 部審人教版八年級(jí)數(shù)學(xué)下冊(cè)聽評(píng)課記錄18.2.1 第1課時(shí)《矩形的性質(zhì)》
- 七年級(jí)上冊(cè)道德與法治第十課綻放生命之花聽課評(píng)課記錄(2課時(shí))
- 星球版地理八年級(jí)下冊(cè)《第二節(jié) 生態(tài)環(huán)境保護(hù)與資源開發(fā)》聽課評(píng)課記錄1
- 人教版歷史八年級(jí)上冊(cè)第22課《抗日戰(zhàn)爭的勝利》聽課評(píng)課記錄
- 小學(xué)五年級(jí)聽評(píng)課記錄
- 魯教版數(shù)學(xué)七年級(jí)上冊(cè)1.1《認(rèn)識(shí)三角形》聽評(píng)課記錄5
- 蘇科版數(shù)學(xué)七年級(jí)下冊(cè)聽評(píng)課記錄7.3圖形的平移1
- 四年級(jí)計(jì)算題大全(列豎式計(jì)算,可打印)
- 科技計(jì)劃項(xiàng)目申報(bào)培訓(xùn)
- 591食堂不合格食品處置制度
- 產(chǎn)業(yè)鏈鏈長分工表
- 國際金融課件(完整版)
- 導(dǎo)向標(biāo)識(shí)系統(tǒng)設(shè)計(jì)(一)課件
- 220t鍋爐課程設(shè)計(jì) 李學(xué)玉
- 全英文劇本 《劇院魅影》
- 北京城的中軸線PPT通用課件
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
- 京東方頂崗實(shí)習(xí)報(bào)告1
評(píng)論
0/150
提交評(píng)論