计算机网络-应用层-FTP文件传送协议

本文介绍了三种文件传输协议。FTP只能传送整个文件,运行时有主进程和从属进程并发工作,每次传输需建立两个TCP连接。若只需对远程文件稍作修改,FTP并不适用。网络文件系统NFS允许在文件特定位置读写。简单文件传送协议TFTP使用UDP,有差错改正措施,适用于小型设备。

FTP使用的共享方式是复制整个文件,如果要存取服务器上的一个文件,必须先在本地获得一个副本,如果要修改文件,就要先修改本地的副本,再上传到服务器。总之FTP只能传送整个文件。

工作原理
FTP运行时,服务器端会有两类进程,主进程从属进程,主进程负责接受请求,从属进程负责处理不同的请求。主进程和从属进程是并发进行的。

例如,在数据传输过程中,就要建立两个进程控制进程数据传输进程,建立了两个TCP链接,控制进程只传输控制信息,数据传输进程负责传输数据。其步骤如下:

  1. 客户进程向服务器发送建立连接请求时,需要寻找FTP服务器的熟知端口21,并告知服务器自己的另一个端口号。
  2. 服务器用自己的另一个端口20与客户进程提供的端口号进行连接。

FTP每次传输都需要传送整个文件,如果只需要对远程的文件进行稍微的修改,就不适用于FTP。

网络文件系统NFS则允许应用进程打开一个远程文件,并能在该文件的某一个特定位置上开始读写数据。

简单文件传送协议TFTP
TFTP使用UDP数据报,需要有自己的差错改正措施。
TFTP的主要优点:

  1. 可用于UDP环境。
  2. 所占内存很小,适用于小型计算机或者特殊设备。

TFTP的主要特点;

  1. 每次传送512字节,最后一次可不足512.
  2. 数据报文按需编号。
  3. 支持ASCII或二进制传送。
  4. 可对文件进行读写。
  5. 使用简单的首部。

TFTP工工作像停止等待协议,发送一个文件块后等待确认,收不到确认就重发。接收方在规定时间内收不到下一个文件块就重发确认。

TFTP的结尾是一个不满512字节的数据字段,如果要传送的文件恰好是512字节的整数倍,则要再发送一个只有首部内容为空的数据报文。

package com.kwantler.YN_EW.service.impl; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class FilePhoto { /** * 从网络Url中下载文件 * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public static void downLoadByUrl(String urlStr, String fileName, String savePath) throws IOException { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置超时间为3秒 conn.setConnectTimeout(5 * 1000); // 防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 得到输入流 InputStream inputStream = conn.getInputStream(); // 获取自己数组 byte[] getData = readInputStream(inputStream); // 文件保存位置 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdir(); } File file = new File(saveDir + File.separator + fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(getData); if (fos != null) { fos.close(); } if (inputStream != null) { inputStream.close(); } System.out.println("info:" + url + " download success"); } /** * 从输入流中获取字节数组 * * @param inputStream * @return * @throws IOException */ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); return bos.toByteArray(); } public static void main(String[] args) { try { downLoadByUrl( "https://www.mybiosource.com/images/tds/protocol_samples/MBS700_Antibody_Set_Sandwich_ELISA_Protocol.pdf", "ELISA.pdf", "E:/upload/protocol"); } catch (Exception e) { // TODO: handle exception } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值