前言
学习了Java网络编程了,为了检验自己的学习程序和熟悉相关的知识点,为此,使用Java Socket编程实现了一个简单的FTP服务器。以下记录了自己整个开发的流程。
FTP协议
自己平时也有用过ftp协议进行文件的传输,知道FTP协议的默认端口是21,可对于底层是如何实现,客户端与服务端之间的通信时如何进行的并不是了解,为此,专门查看了TCP/IP详解协议卷中对FTP的描述,理解FTP的工作机制。
工作机制概要
FTP是文件传输协议,与大多数其他的TCP应用不同,它在客户进程和服务器进程之间使用两个TCP连接,一个控制连接,默认使用TCP的21端口,它一直持续到客户进程与服务进程之间的通信完成为止,另一个按需可以随时创建和撤销的数据连接,用于数据传输,这条TCP连接是按照与控制用的连接相反的方向建立的,即客户端创建ServerSocket,而服务端创建Socket,而文件传输的处理过程如下:
数据表示
FTP协议规范提供了控制文件传送与存储的多种选择。在以下四个方面中的每一个方面须作出一个选择。
1. 文件类型
1. ASCII码文件类型(默认选择)文本文件已NVT ASCII码形式在数据连接中传输。这要求发方将本地文本文件转换成NVT ASCII码形式,而收方则将NVT ASCII码再还原成本地文件。其中用于NVT ASCII码传输的每行都带有一个回车,而后是一个换行。这意味着收方必须扫描每个字节,查找CR、LF对。
2. EBCDIC文件类型,该文本类型传输方式要求两端都是EBCDIC系统
3. 图像文件类型(也称为二进制文件类型),数据发送呈现为一个连接的比特流。通常用于传输二进制文件。
4. 本地文件类型,该方式在具有不同字节大小的主机间传输二进制文件。每一字节的比特数由发方规定。对使用8bit字节的系统来说,本地文件以8bit字节传输就等同于图像文件传输。
2. 格式控制,该选项只对ASCII和EBCDIC文件类型有效
1. 非打印(默认选择),文件中不含有垂直格式信息
2. 远程登录格式控制,文件含有向打印机解释的远程登录垂直格式控制。
3. Fortran回车控制,每行首字符是Fortran格式控制符。
3. 结构
1. 文件结构(默认选择),文件被认为是一个连续的字节流。不存在内部的文件结构
2. 记录结构,该结构只用于文本文件(ASCII或EBCDIC)
3. 页结构,每页都带有页号发送,以便收方能随机地存储各页。该结构由TOPS-20操作系统提供
4. 传输方式,主要规定文件在数据连接中如何传输。
1. 流方式(默认选择),文件以字节流的形式传输。对于文件结构,发方在文件尾提示关闭数据连接。对于记录结构,有专用的两字序列码标志记录结束和文件结束。
2. 块方式,文件以一系列块来传输,每块前面都带有一个或多个首部字节。
3. 压缩方式,一个简单的全长的编码压缩方法,压缩连续出