TCP通信功能实现计算机课程设计说明书_第1页
TCP通信功能实现计算机课程设计说明书_第2页
TCP通信功能实现计算机课程设计说明书_第3页
TCP通信功能实现计算机课程设计说明书_第4页
TCP通信功能实现计算机课程设计说明书_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编号:计算机网络课程设计说明书题目:TCP通信功能实现系别:计算机科学与工程学院专业:学生姓名:学号:指导教师:

摘要TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础。定义了电子设备连入因特网的规范。而Socket通信就是基于TCP/IP协议的一直通信机制。TCP/IP网络中最常用的传输协议TCP和UDP。传输层通常以TCP和UDP协议来控制端点到端点的通信。Socket定义了通信的端点,是由IP地址和端口号组成。JAVA语言已经成为现今网络应用中最广泛的语言,本文就是介绍JAVA中的Socket套接字以及通信的实现。关键字:JAVASOCKET,TCP/IP,套接字,网络编程目录计算机网络课程设计 1说明书 1一、设计任务 3二、总体设计 3(一)TCP/IP协议介绍 3(二)JAVA语言网络编程的优势 3(三)JAVA中的ServerSocket类与Socket类 4三、测试 5(1)服务器端 5(2)客户端 6(3)控制面板相关信息提示 7(4)功能实现 7四、设计总结 8(一)总评 8(二)遇到的问题以及解决方案 8五、使用说明 8六、附录(代码程序) 9七、参考文献 21一、设计任务能实现客户端和服务器端之间文件的传输。服务器端口能实现目标文件浏览,并将所选择的文件作为发送文件。客户端能实现保存路径的浏览,默认情况下将接受文件存放在一定路径。客户端和服务器端能有简单的图形界面。二、总体设计采用TCP进行通讯,需要服务器和客户端两个部分,因此需要FileServer和FileClient两个部分,两个文件的IP地址和端口都是程序指定的。运用JAVA语言,在Eclipese应用程序中进行代码编写。(一)TCP/IP协议介绍TCP/IP是TransmissionControlProtocol/InternetProtocol的简写,中文译为传输控制协议/因特网互联协议,又叫做网络通讯协议,由网络层的IP协议和传输层的TCP协议组成,是Internet最基本的协议、Internet国际互联网络的基础。TCP/IP定义了电子设备连入因特网的规范,以及数据如何在它们之间传输的标准。该协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。(二)JAVA语言网络编程的优势Java语言是现今使用最为广泛的编程语言,它的日益流行,尤其是Java与IntemetWeb的密切结合,使JAVA语言在全球取得了巨大的成功。Java语言的多平台、面向对象、继承、封装、分布式、多线程及完善的安全机制等特色,成为现代信息系统建设与日常应用中的良好的开发平台和运行环境。Java语言是基于网络计算的语言,网络应用是Java语言的重要应用之一。Java提供的类库支持TCP/IP协议,应用程序可通过URL地址,在访问网络上任何地方的对象时,如同访问本地文件一样简单。(三)JAVA中的ServerSocket类与Socket类图3Java程序中Socket通信流程示意图三、测试(1)服务器端图4服务器端界面图5文件浏览界面说明:文件选择:能打开Window下的文件浏览,选择自己想要发送的文件,并能将文件名以及所在路径分别显示在两个文本框中(图5)。点击建立连接:打开服务器,建立网络连接。如若没有打开服务器客户端无法连接到网络。(2)客户端图6客户端界面说明: 选择路径:选择接受文件保存的路径,如果没有选择路径时,则默认保存在D盘目录下。 点击建立连接:点击后,则打开IP网络连接,如果服务器端没有连接时,则会抛出拒绝网络连接异常:.ConnectException:Connectionrefused(如图7)。图7.ConnectException异常(3)控制面板相关信息提示在控制面板中会有相关信息显示,便于在使用者能更好的了解该程序。(4)功能实现该TCP通信系统能够实现服务器端向客户端传送文件的功能,对于文件的类型以及大小都没有要求(如图8)。测试发送文件包含了PNG图像、WORD文档、EXE应用程序、txt文本。图8接受文件列表四、设计总结(一)总评在现今互联网飞速发展的今天,网络通信发展的越来越迅速,所覆盖的范围也越来越广泛,作为计算机相关专业的我们,更是感受到了互联网的强大力量,了解网络传输的原理更是势在必行。通过此次计算机网络课程设计,帮我回忆、巩固了上学期的计算机网络知识,并且通过课程设计,将理论知识运用于实践当中来。同时JavaSocket网络编程的应用越来越广泛,其高效性,快捷性也得到了广大的软件开发商的喜爱,作为一种底层通信的先进开发手段,它在TCP,UDP,URL等网络通信方面的优势更加突出,因此选择了JAVA作为此次课程设计的开发语言。此次计算机网络课程设计我选择了TCP通信,主要是实现服务器端和客户端之间文件传输。TCP通信要求服务器端要处于监听阶段,即要先打开服务器端。TCP要求服务器端和客户端都处于连接状态才能完成文件的传送,如果有一方断开则会停止传送。(二)遇到的问题以及解决方案 1.一开始对于服务器端和客户端理解不够透彻,于是先打开客户端在打开服务器端,结果抛出网络连接异常。后面通过查找资料后,明白错误的原由,在接下来的操作中,避免了异常抛出。 2.抛出java.io.FileNotFoundException:D:\接收文件(拒绝访问。)异常。后面通过资料的查阅,发现是因为在文件接收,新建文件中,文件名与路径名之间的错误使用,导致异常抛出。具体代码如下:FileOutputStreamfos1=newFileOutputStream(FileClientFrm.getpath());Getpath()函数的返回值路径,因此出现错误。解决方法是将代码程序修改为:FileOutputStreamfos1=newFileOutputStream(FileClientFrm.getpath()+fileName);五、使用说明打开服务器端,点击“文件选择”选择要发送的文件—>点击“建立连接”,调用SendFileServer.server()函数,打开服务器监听打开客户端口,可选“选择路径”按钮,选择文件保存路径,以及另存为文件名称;直接点击“建立连接”,则默认保存在D盘目录下。文件传送成功。在服务器端控制面板上会显示文件发送结束,表示文件传输成功。六、附录(代码程序)//服务器端代码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;//各种包的导入publicclassFileServer{ publicstaticvoidmain(Stringargs[]) { FileServerFrmfrm=newFileServerFrm(); //newFileServer(); }}classFileServerFrmextendsJFrameimplementsActionListener{ FileDialogop;//文件数据类 staticJTextFieldtarea1=newJTextField(); staticJTextFieldtarea2=newJTextField(); JFramejf=newJFrame("服务器端"); JLabellab=newJLabel("要发送的文件名称是:"); JButtonFilechooce=newJButton("文件选择"); JButtonlink=newJButton("点击建立连接");//图形界面设计(控件定义) staticStringgetname() { returntarea1.getText(); } staticStringgetpath() { returntarea2.getText(); }//文件打开 publicFileServerFrm() { super("打开和保存文件"); //图形界面设计(添加控件) 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进行文件传输*此文件为服务器文件*当接受到客户端的请求之后,先向其传输文件名*当客户端接受完毕之后,向客户端传输文件**/importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassSendFileServerimplementsRunnable{ //服务器监听端口 privatestaticfinalintMONITORPORT=12345; privateSockets; publicSendFileServer(Sockets){ super(); this.s=s; } publicstaticvoidserver() { try{ //创建服务器socket ServerSocketss=newServerSocket(MONITORPORT); while(true) { //接收到一个客户端连接之后,创建一个新的线程进行服务 //并将联通的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("文件传输结束"); }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("点击建立连接");//客户端图形界面设计(控件定义) staticStringgetname() { returnsv.getFile(); } staticStringgetpath() { returnsv.getDirectory(); } publicFileClientFrm() { super("打开和保存文件"); //界面图形界面设计(控件添加、位置设计) 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进行文件传输*此文件为客户端文件*连接上服务器之后,直接接受文件***/publicclassSendFileClient{ privatestaticfinalStringSERVERIP="03";//IP地址 privatestaticfinalintSERVERPORT=12345; privatestaticfinalintCLIENTPORT=54321; SendFileClient(){ //TODOAuto-generatedmethodstub //用来接受传输过来的字符 byte[]buf=new

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论