内容概况:文件传输FTP,HTTP

一、文件传输FTP

1.FTP工作原理

(1)FTP是什么??

  • FTP文件传输协议,是支持Internet文件传输的各种规则所组成的集合。
  • 这些规则使internet用户可以把文件从一台主机上拷贝到另一台主机上
  • 除此之外,还提供登录、目录查询以及其他会话控制等功能。
  • 解释
    • FTP文件协议就是一个在网络中上传下载文件的一套规则

(2)FTP的工作原理

  • FTP本质

    • FTP的本质是TCP通信

    • 通过FTP传输文件,双发至少需要建立两个TCP连接。

    • 一个称为控制连接,用于传输FTP命令。

    • 一个称为数据连接,用于传输文件数据。

  • 疑问:为什么不用一个TCP连接??

    • 区分消息上有困难。如果只有一个通信连接,既要区分FTP命令,又要区分文件包,其实是很困难的。

image-20250716221301434

  • FTP的数据连接和控制连接方向一般是相反的

  • 举例说明:

    • 用户使用FTP客户端连接FTP服务器请求下载文件

    • 控制连接方向:

      • 客户端主动连接服务器告知其下载命令
    • 数据连接方向:

      • 服务端主动连接客户端下发数据
      image-20250716221611937

当客户端和FTP服务器建立控制连接后,需要主动告诉服务器采用哪种传输模式

  1. 主动模式(Port模式)

    服务器主动连接客户端,然后传输文件。

  2. 被动模式(Passive模式)

    客户端主动连接服务器

    即控制连接和数据连接都由客户端发起。

    一般情况下主动模式会受客户端防火墙影响,所以被动模式使用较多。

在使用FTP进行数据传输时,有两种数据传输方式。

  1. ASCLL传输方式

    以ASCLL编码方式传输数据,适用于传输仅包含英文的命令和参数或者英文文本文件。

  2. 二进制传输方式(建议使用方式)

    可以指定采用哪种编码传输命令和文件数据。

    如果传输的文件不是英文文件则应该采用该方式。

  • 一般情况下,使用FTP传输文件时。客户端必须限登录服务器,获取相应权限后,才能上传或下载文件。

    服务器也可以允许用户匿名登录FTP,不需要都拥有一个合法账号。

2.搭建FTP服务器

  • 下载Serv-U等FTP服务器软件,在想要作为FTP服务器的电脑上运行即可。
  1. 创建域 直接不停下一步即可
  2. 使用单向加密
  3. 创建用于上传下载的FTP 账号密码

3. FTP关键类

(1)NetworkCredential类

  • 命名空间:System.Net

  • NetworkCredential通信凭证类

  • 作用:用于在Ftp文件传输时,设置账号密码。

    1
    NetworkCredential n = new NetworkCredential("WQX","123456");
    • 参数一:账号
    • 参数二:密码

(2)FtpWebRequest类

  • 命名空间:System.Net
  • Ftp传输协议客户端操作类
  • 作用:上传、下载、删除服务器上的文件。
  • 重要方法:

    1. Create 创建新的WebRequest,用于进行Ftp相关操作

      1
      FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://127.0.0.1/Test.txt"));
    2. Abort 如果正在进行文件传输,用此方法可以终止传输

      1
      req.Abort();
    3. GetRequestStream 获取用于上传的流

      1
      Stream s = req.GetRequestStream();
    4. GetResponse 返回FTP服务器响应

      1
      FtpWebResponse res = req.GetResponse() as FtpWebResponse;
  • 重要成员

    1. Credentials 通信凭证,设置为NetworkCredential对象

      1
      2
      //NetworkCredential n = new NetworkCredential("WQX","123456");
      req.Credentials = n;
    2. KeepAlive bool值,当完成请求时是否关闭到FTP服务器的控制连接(默认为true,不关闭)这个主要是传送命令信息的。

      1
      req.KeepAlive = false;
    3. Method 操作命令设置

      image-20250716231330739

      1
      req.Method = WebRequestMethods.Ftp.DeleteFile;
    4. UseBinary 是否使用2进制传输

      1
      req.UseBinary = true;
    5. RenameTo 重命名

      1
      req.RenameTo = "myTest.txt";

(3)FtpWebResponse类

  • 命名空间:System.Net

  • 作用:它是用于封装FTP服务器对请求的响应

              它提供操作状态以及从服务器下载数据
    

    ​ 我们可以通过FtpWebRequest对象中的GetResponse()方法获取

    ​ 当使用完毕时,要使用Close释放。

    通过这个类来真正的从服务器获取内容。

    1
    FtpWebResponse res = req.GetResponse() as FtpWebResponse;
  • 重要方法:

    1. Close:释放所有资源。

      1
      res.Close();
    2. GetResponseStream:返回从FTP服务器下载数据的流。

      1
      Stream s = req.GetRequestStream();
  • 重要成员:

二、HTTP

1. HTTP是什么

  • HTTP超文本传输协议就是一个在网络中上传和下载文件的一套规则

2. HTTP的工作原理(短连接)

  • 本质:HTTP也是TCP通信
    1. HTTP客户端首先于服务器建立TCP连接
    2. 然后客户端通过套接字发送HTTP请求,并通过套接字接收HTTP响应
    3. 由于HTTP采用TCP传输数据,因此不会丢包,不会乱序
  • 特点:

    1. HTTP是以TCP方式工作的

      连接—> 请求 —> 响应 —> 断开

      image-20250728151921851

      image-20250728152039828

    2. HTTP是无状态的

      image-20250728152125514

    3. HTTP使用元信息作为标头

      image-20250728152219205

3. HTTP协议的请求类型和响应状态码

image-20250728152537828

image-20250728152639499

image-20250728152848117

  • HTTP协议响应状态码

    image-20250728152950712

    image-20250728153036909

    image-20250728153116405

4. HttpWebRequest类