人啊,是不应该说谎的,不过貌似我已经说了很多谎了
文章图片
,其实说一个谎很简单,但是你会为了圆这一个谎而去说更多的谎,从此陷入说谎的万劫不复之地。
以上内容完全只是个人感想,欢迎大家批评。下面进入正题,先上图:
文章图片
目前的界面我暂时做成了这个样子,但是文件传输功能还是没有添加进来,因为错失一节课,导致我到现在对于文件传输这个玩意儿还是一知半解,不过今天比昨天好。
我的题目是从文件传输到通信协议,有人可能会说,不是应该先有了通信协议,在才能实现文件传输么。没错!是这样,但从学习的角度来说,我们首先是要向实现文件传输这个功能,然后必须去了解通信协议。
先说说要做到文件传输(是在之前的群聊客户端里面加入传文件的功能),我们要首先解决什么问题:区分要传输的内容到底是文件还是普通的文本(即文字消息)和文件怎么传输。之前我们已经解决掉了文本传输:以\r\n来分割字符串,以实现消息的完整性(即为文本消息的传输协议)。
对于文件传输,我们就需要一个关于文件传输的通信协议:
首先,我们知道每一种消息(文本和文件)都是由两部分组成的:消息头和消息体。每一种消息头的结构格式都是固定的,而消息体的格式则因为消息类型不同而不同。
消息头的结构如下图:
文章图片
对于消息体,文本消息的消息体部分很简单,就只是聊天的内容。而文件的消息体则是由组成文件的字节和文件名表示。
在我们发送消息时,必须按照顺序和格式数据一次写入输出流对象中。服务器端在读取的时候,首先要先读取消息的总长度,在读取消息的类型,判断此消息是文本还是文件,最后根据类型对消息做出相应的措施。
通过以上过程我们可以知道所谓的通信协议,可以说是通信双方都必须遵守的通信规则,只能遵守这个规定,通信双方甚至多方才能正常通信。
从文件传输来了解的协议当然只能算是冰山一角,对于通信协议的更多内容还得我们自己阅读更多的文献去了解。
进步并不会在一瞬间。
【从文件传输到通信协议】
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)