java实现ftp协议_Java通信实战:编写自定义通信协议实现FTP服务

要做什么?

15aaffb1ee496ae74b60b09338257c20.png

我们知道,很多WEB服务器,例如Apache HTTPD,Nginx等都提供类似上面图示的方式进行工作:

Server负责Worker的创建,销毁;

Woker负责具体与客户端的通信,处理请求;

那么,我们接下来要做的就是一个简单的例子,实现客户端和服务端的交互,例如发送

文本消息,客户端上传文件到服务器,服务器提供下载文件功能。

要通信,就要约定协议!

我们知道计算机发送,接受的都是字节数据,如果A“胡乱”的给B发数据,B能知道是

什么意思吗?很显然,A应该清楚的告诉B如何接受数据,接受多大的数据,接受完毕后如何处理,数据都是些什么意思,而这些就是协议~

那么下面,就来约定协议:

sendMsg charset=gbk 世界,你好

sendFile charset=gbk JAVA并发编程实战.pdf

downloadFile charset=utf-8 JAVA编程思想.pdf

上面的格式,说明了,client可以给server发送消息、文件,还可以向server索要文

件。对于发送文本消息,很显然,接受方需要知道用什么编码将字节流进行转换;类似的,上传文件/下载文件,需要知道文件名称编码。对于文件上传下载,我们都采用字节流处理,并不涉及到转换成字符流,所以对于文件可以不用提供文件内容编码了。至于上传下载的路径,我们可以配置即可。另外,需要注意的是,不论对于发送文本消息,还是文件,都需要结束,所以需要发送消息的长度,文件的长度。具体来说,我们可以用1个BYTE来代表sendMsg/sendFile/downloadFile;用1个BYTE来代表charset;用1个LONG来代表长度;其他信息就是字节流了。

从类的角度出发进行设计

要提供SOCKET的封装类

说到底,是SOCKET之间的通信,如果不对SOCKET进行一次封装

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值