基于TCP&UDP的网络文件服务

81 阅读4分钟

基于TCP&UDP的网络文件服务

实验目的****

  1. 掌握Java Socket,TCP,UDP编程的基本概念和方法;

  2. 掌握Java I/O的基本操作;

  3. 掌握Java多线程编程。

实验内容****

  1. 复习Java I/O和Socket编程相关概念和方法;

  2. 基于Java Socket TCP和UDP实现一个简易的网络文件服务程序,包含服务器端FileServer和客户端FileClient;

  3. 服务器端启动时需传递root目录参数,并校验该目录是否有效;

  4. 服务器启动后,开启TCP:2021端口,UDP:2020端口,其中,TCP连接负责与用户交互,UDP负责传送文件;

  5. 客户端启动后,连接指定服务器的TCP 2021端口,成功后,服务器端回复信息:“客户端IP地址:客户端端口号>连接成功”;

  6. 连接成功后,用户可通过客户端命令行执行以下命令:

**[1] ********ls 服务器返回当前目录文件列表(<file/dir> name size)

**[2] ********cd ********< **dir **> ********进入指定目录(需判断目录是否存在,并给出提示)

********[3] **********get   ********通过UDP下载指定文件,保存到客户端当前目录下

********[4] ********bye 断开连接,客户端运行完毕

  1. 服务器端支持多用户并发访问,不用考虑文件过大或UDP传输不可靠的问题。

运行示例****

server端:

 

Client端:

 

提示:

  1. 通过TCP连接时,服务器端需保存用户当前所在目录的信息(初始连接时为服务器指定的根目录),通过cd .. 可退到上一级目录,但当前目录为根目录时,不做变动。

  2. TCP连接时,客户端可能一次接收多行数据,需循环从输入流中读取,服务器端可在每次输出结束时多输出一个空行,客户端根据空行来判断每次输入的结束。

  3. get命令的执行:可先发送给TCP连接,判断get后的参数在当前目录下是否为普通文件,若不是,回复提示信息,若是,回复客户端特定信息(如OK),以及该文件的物理路径和大小,客户端接收到OK后,紧接着读取后续的信息,再通过UDP请求该文件。

  4. UDP传输文件时,需将文件分次读取到byte[]缓存中,每次封装一个DatagramPacket,依次发送给客户端,为了确保发送的顺序,可在每次发送结束时通过:

TimeUnit.MICROSECONDS.sleep(1);

来限制发送的速度;客户端接收时,循环接收DatagramPacket,循环次数为文件大小/缓存大小 + 1。

实验仪器、设备****

1) PC机最低配置:2G Hz以上CPU;1G以上内存;1G以上硬盘空间;

2) JDK 1.6或以上版本;

3) Eclipse 4.2或以上版本。

实验要求****

1) 按实验内容完成整个程序,并将你写的所有源代码和说明文档打包命名为:学号_姓名.rar 提交至 ftp://10.13.0.10/课件/ ICARNEGIE_SSD8_网络与分布计算/实验提交 目录下;

2) 代码应符合Java编程规范和添加必要的注释。

评分标准****

1、类的设计、JAVA代码规范、JAVADOC、类、方法、变量命名规范。 10分

2、服务器TCP输入读取、命令基本处理、错误命令、参数处理。 10分

3、服务器TCP多线程编程、线程池的使用。 20分

4、正确处理ls命令,返回当前目录文件信息,注意中文字符的显示是否正确。 10分

5、正确处理get命令,通过TCP回复客户端信息中包含文件的物理路径和大小。文件传输采用UDP方式,循环缓冲读取文件发送多个数据包给客户端。20分。

6、正确处理cd命令,返回当前目录,根目录之外不处理。 10分

7、正确处理bye命令,关闭连接。10分

8、服务器、客户端正确接收运行参数,没有采用硬编码的方式设置服务器地址、服务器根目录。10分