计算机课程设计说明书.docx

上传人:b****5 文档编号:3981880 上传时间:2022-11-26 格式:DOCX 页数:21 大小:200.11KB
下载 相关 举报
计算机课程设计说明书.docx_第1页
第1页 / 共21页
计算机课程设计说明书.docx_第2页
第2页 / 共21页
计算机课程设计说明书.docx_第3页
第3页 / 共21页
计算机课程设计说明书.docx_第4页
第4页 / 共21页
计算机课程设计说明书.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

计算机课程设计说明书.docx

《计算机课程设计说明书.docx》由会员分享,可在线阅读,更多相关《计算机课程设计说明书.docx(21页珍藏版)》请在冰豆网上搜索。

计算机课程设计说明书.docx

计算机课程设计说明书

编号:

计算机网络课程设计

说明书

题目:

TCP通信功能实现

系别:

计算机科学与工程学院

专业:

学生姓名:

学号:

指导教师:

 

2015年04月22日

摘要

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础。

定义了电子设备连入因特网的规范。

而Socket通信就是基于TCP/IP协议的一直通信机制。

TCP/IP网络中最常用的传输协议TCP和UDP。

传输层通常以TCP和UDP协议来控制端点到端点的通信。

Socket定义了通信的端点,是由IP地址和端口号组成。

JAVA语言已经成为现今网络应用中最广泛的语言,本文就是介绍JAVA中的Socket套接字以及通信的实现。

关键字:

JAVASOCKET,TCP/IP,套接字,网络编程

 

一、设计任务

1、能实现客户端和服务器端之间文件的传输。

2、服务器端口能实现目标文件浏览,并将所选择的文件作为发送文件。

3、客户端能实现保存路径的浏览,默认情况下将接受文件存放在一定路径。

4、客户端和服务器端能有简单的图形界面。

二、总体设计

采用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);

五、使用说明

1)打开服务器端,点击“文件选择”选择要发送的文件—>点击“建立连接”,调用SendFileServer.server()函数,打开服务器监听

2)打开客户端口,可选“选择路径”按钮,选择文件保存路径,以及另存为文件名称;直接点击“建立连接”,则默认保存在D盘目录下。

3)文件传送成功。

在服务器端控制面板上会显示文件发送结束,表示文件传输成功。

 

六、附录(代码程序)

//服务器端代码

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.addActionListene

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1