JAVASE(基础)基于网络的文件传输项目综合练习

 

大家好,我是雨宣,时隔多日,又和大家见面了。近期又很多人私信我,大多数都是刚学完JAVASE的小白或者是想回顾JAVASE阶段的白小白,苦于找不到合适的练习题,很多教程后面会有少量的练习题,但是综合度不高,针对性一般,大多数人做完了我之前写的一个JAVASE项目综合演练后,觉得还是不够,还想来个在有难度的练习题。

这段时间忙中抽闲,结合企业中实际的业务场景以及JAVASE自身的知识点,给大家带来了一个基于网络,IO以及其他基础知识点的综合练习项目。这个项目主要考察大家对IO流,InputStream,OutputStream,Socket,ServerSocket的掌握。

俗话说不同的厨师相同的食材能够做出不同的美味,本项目主要结合网络和IO流来给大家带来不一样的项目体验。

项目背景简介

相信大家都下载过文件,从网上下载一个图片,视频什么的,有的从浏览器进行下载,有的可能会安装迅雷,IDM之类的下载工具,那么我们在下载的同时有没有想过其中的原理什么?为什么我们一点下载按钮会有文件下载下来?其数据的形式是以什么传输的?为什么会有限速?限速其背后的是如何实现的?什么是断点续传?什么是分段上传?什么是合并?以上提出了几个问题,如果大家学完后能答出以上几个问题的百分之八十,那就说明掌握的还差不多。

项目方案(本次项目主要的方案)

方案一:

方案一就类似于微信,比如说你发一个文件给别人,别人收到,做法是 你先发送一个文件到微信的服务器,文件成功上传到服务器后,在通知别人,别人收到通知后在去微信的服务器下载该文件,该方案又有主动模式和被动模式(相对于服务器而言):

主动模式流程图如下:

被动模式流程图如下:

 

方案二:

方案二是对端传输,比如现在有两台电脑A和B,A要给B发文件,直接发给B,不用经过任何中转。流程图如下:

方案三:

方案三是在方案二的基础上优化而来的,比如现在有两台电脑A和B,A要给B发文件,这个时候有一个中央服务器C,A和B在局域网内,C可能不在同一个局域网,A发文件给B,步骤如下:

1、A先发给C,询问C是否有B的地址(IP地址)

2、C:如果有,直接返回B的IP,A和B发送建立对端链接,如果没有,A发送给C,B在从C取,相当于走的是第一种方案。

流程如如下:

 

题目要求

要求自主实现3套方案(不是任选其一哦),在能力允许的情况下三种方案都实现一遍,尤其是第三种,如果第三种能自己实现出来,对IO和网络这块的理解将会有更深一个层次的理解。

涉及到的类如下:

//传输对象
public class TrsFile {

   private String fileName; //文件名称
   private String fileType; //文件类型
   private Long fileSize; //大小
   private String srcIP; //来源IP
   private String srcMAC; //来源MAC地址
   private String dstIP; //目标IP
   private String dstMAC; //目标MAC地址
   private byte[] data; //传输内容

}

/**

 1、为了适当的增加难度,故增加了目标的IP 和 目标的MAC地址,就是发送给对方电脑的IP和MAC地址,对方电脑在收到的时候需要判断是不是给我发的。
 2、难点:在发送的时候如何获取到对方的MAC地址

*/

1、要求使用单个Class类来完成,如果有多个类,采用内部类的形式。

2、项目做完后,要求使用 java xxx 可以直接启动,非在编辑器中运行。

3、在做项目过程中进行必要合法性判断。

4、采用命令行的形式来发送:比如

java xxx 192.168.3.112:8080 D:/xxx.jpg

//拆解
java 命令
xxx 编译后的class文件
192.168.3.112:8080  要发送给目标电脑的IP
D:/xxx.jpg  要发送的文件

//如果采用方案一
192.168.3.112:8080  为server的地址

//如果采用方案二
192.168.3.112:8080  为目标电脑的地址

//如果采用方案三
192.168.3.112:8080  为server的地址,server收到后返回 
已经链接的所有客户端的地址,需要把所有的地址打印在CMD窗口中,比如:
1、192.168.3.110:8080
2、192.168.3.111:8080
3、192.168.3.112:8080
4、192.168.3.113:8080
...
如果输入 3,程序拿到后直接向 192.168.3.112:8080 传输,
走方案二。如果输入3,目标端口无法链接,则直接向server端发送,
走方案一。如果server端没有任何返回,直接向server端发送,走方案一。


//注意
在拿到列表选择IP的时候需要判断目标端口是否可以发送,如果不行目标IP无法连上,则向server发送,如果server也断开,直接返回。

拓展练习

以下根据能力情况来决定要不要扩展哦

1、发送和接收双方需要密钥,发送端要发送文件给接收端的时候需要拿到接收端的密钥进行发送,提高安全性。

2、服务器地址可以配置成默认的,java xxx 192.168.3.112:8080 D:/xxx.jpg 其中的 192.168.3.112:8080为接收端地址。

3、在程序启动的时候可以提供三个选项来选择,要启动方案几来发送。用户输入几,就开始方案几的传输。

4、大文件断点续传,分段上传,比如传输一个10GB的文件,采用多线程分段上传,按照序号在接收端进行合并。分段上传合并我之前写过一篇文章可以参考。

收获

如果你能独立完成本项目且能独立完成拓展练习,那么你对IO流,网络部分乃至整个JAVASE都掌握到了一个恐怖的地步,恭喜您,向着华为、阿里,腾讯又迈进了一步。

如果在做项目的过程中有任何疑问可以在评论区留言或者私信我,本人每天会看至少一次,看见后会给你们思路以及具体的方案。欢迎大家一块儿来完成本项目。当然这个这是JAVASE阶段的,如果学习了JAVAWEB,可以用WEB的形式实现出来,增加一个好看的页面。其实这里边核心的知识点就是网络和IO,但是能将网络和IO运用到炉火纯青的地步的人确实很少,通过本项目可以帮你达到对网络和IO的一个更深层次的运用。

不管你是培训机构的菜鸟,还是靠自学看视频,估计每次学习完后就是简单的练习,可以说是非常简单,没有什么发散性思维的巩固练习,写程序主要是练,如果每天只是看看,那等于没有学一样,眼里过千遍,不如手里过一遍,如果一遍不行那就十遍。

题外话

很多人私信我,大多数是一些转行或者正在培训的小白,也有靠着毅力自学的小小白,他们比较关心的问题就是学了后能不能找到工作,也有的人毅力耗尽了自学不下去了,想去报机构,报了后发现和宣传的截然不同,学费动不动就是一万多,学习几个月,发现还是不会做题,没有思维,比如说本章的练习题。如果大家有这方面的想法可以咨询我,不敢说帮你决定,但是可以给你建议,少走弯路。毕竟大家都是同行人,同路人。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值