在上一篇博客中(https://blog.csdn.net/Mr_suen/article/details/108116504),太上皇介绍了HTTP文档发送的简要流程,这为朕的工作深入提供了参考,本章主要是整理了在API接口中进行文件传输协议的实现。

关于Socket的那些事

Socket是在应用层和传输层之间的一个抽象层,他把TCP/IP层复杂的操作抽象成几个简单的接口,供应用层调用实现进程在网络中的通信。在通信模型中,Server和Client各自建立了一个Socket对象,然后通过Socket对象对数据进行传输。一般情况下,服务器会处于一个循环状态,使用listen()监听某个端口是否有连接请求,等待客户端建立完Socket发出Connect(连接)请求,Server端向Client端发回Accept(接收)消息。一个连接就建立起来了,Server端和Client端都可以通过Send、Write等方法与对方通信。

对于一个功能齐全的Socket,其工作过程包括如下几个步骤:

  1. 创建Socket;
  2. 打开连接到Socket的输入/出流;
  3. 按照一定的协议对Socket进行读/写操作;
  4. 关闭Socket。

套接字可看作是不同主机间的进程进行双向通信的虚拟管道端点:网络中两台主机各自在自己机器上建立通信的端点--套接字,然后使用套接字进行数据通信。一个套接字包含五个基本元素:协议类型、本地IP地址、本地端口、远端IP地址和远端端口。在操作系统中,套接字是一种系统资源,应用程序使用时应向操作系统申请或注册,使用结束后应用程序应释放该该套接字。根据网络通信的特征,套接字分为三类:流套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)。流套接字是面向连接的,它提供双向的、有序的、无差错、无重复并且无记录边界的数据流服务,适用于处理大量数据,提供可靠的服务。数据报套接字是无连接的,它支持双向的数据传输,具有开销小、数据传输效率高的特点,但不保证数据传输的可靠性、有序性和无重复性,适合少量数据传输、以及时间敏感的音/视频等多媒体数据传输。原始套接字(SOCK_RAW)可以用作对底层协议(如IP或ICM)的直接访问。

其实在上图中已经描述了服务器和客户端进行通信及其通信前后的工作 ,在上一篇文章中提到过,http中的文档传输可以通过流传输,同样,在socket中也可以通过流进行传输。流套接字(SOCK_STREAM)类型的套接口为全双向字节流。对于流类套接口,在接收或发送数据前必需处于已连接状态。用connect()调用建立与另一套接口的连接,连接成功后,即可用send()和recv()传送数据。当会话结束后,调用closesocket()。带外数据根据规定用send()和recv()来接收。

实现SOCK_STREAM类型套接口的通讯协议保证数据不会丢失也不会重复。如果终端协议有缓冲区空间,且数据不能在一定时间成功发送,则认为连接中断,其后续的调用也将以WSAETIMEOUT错误返回。

SOCK_DGRAM类型套接口允许使用sendto()和recvfrom()从任意端口发送或接收数据报。如果这样一个套接口用connect()与一个指定端口连接,则可用send()和recv()与该端口进行数据报的发送与接收。

对socket描述的有点多了,后面朕会详细介绍一下socket的通信原理,敬请期待。

文件传输协议的介绍

FTP是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的控制文件的双向传输。在实现的层面上,FTP又可理解为一个可用于文件传输的客户机/服务器系统,该系统包括客户机端程序和服务器端程序,客户端和服务器端通信规则为FTP协议。在通信协议的分层模型中,文件传输协议是在TCP(Transmission controlProtocol,传输控制协议)之上的一个应用层协议,应用程序之间的通信需要用到传输层提供的字节流透明无误传输服务。Windows操作系统具有TCP/IP协议栈,应用程序可通过Winsock API函数的调用实现端到端透明数据链接的建立。

FTP具有以下特点:

  1. 文件传送协议只提供文件传送的一些基本的服务,它是面向连接的服务,使用TCP作为传输协议,以提供可靠的运输服务。
  2. FTP的主要作用是在不同计算机系统间传送文件,它与这两台计算机所处的位置、连接的方式以及使用的操作系统无关。
  3. FTP使用客户/服务器方式。

文件传输协议的主要工作原理

文件传送协议FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输服务。FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。

一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。主进程的工作步骤如下:

  1. 打开熟知端口(端口号为21),使客户进程能够连接上。
  2. 等待客户进程发出连接请求。
  3. 启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
  4. 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。

FTP的工作情况如图所示。在进行文件传输时,FTP的客户和服务器之间要建立两个连接:“控制连接”和“数据连接”。

客户端发起控制连接,服务器端发起数据连接。当客户进程向服务器进程发出建立连接请求时,首先要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接,连接建立时,控制进程和控制连接随之创建。控制进程在接受到FTP客户发送过来的请求后就创建传送进程和数据连接。服务器进程用传送数据的熟知端口(20)与客户进程所提供的端口号建立数据传送连接。由于FTP使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。

大多数FTP服务都是匿名服务。匿名FTP服务的实质是:提供服务的机构在它的FTP服务器上建立一个公开账户(一般为anonymous),并赋予该账户访问公共目录的权限,以便提供免费服务。如果用户要访问这些提供匿名服务的FTP服务器,一般不需要输入用户名与用户密码。为了保证FTP服务器的安全,几乎所有的匿名FTP服务器都只允许用户下载文件,而不允许用户上载文件。在Internet中,许多公司、大学的主机上含有数量众多的各种程序与文件,这是Internet的巨大与宝贵的信息资源。通过使用FTP服务,用户就可以方便地访问这些信息资源。

除了FTP,朕还了解到可以通过基于TFTP或UDP的协议,但是目前还没有深入探究,这里就不为大家介绍了,大家可以看看这个:https://www.cnblogs.com/chusiyong/p/11394710.html,无论哪种机制,Socket总是离不开的,这也就表现出了套接字的重要性,后面我会为大家完整的整理一本武林秘籍——《Socket密传》。

感谢您的参考,需要帮助的话请留言哦。

HTTP文档传输协议(2)相关推荐

  1. Typora如何将图片使用相对路径保存到统一文件夹中(解决.md文档传输丢图片的方法)

    Typora是一款编辑markdown语法的做离线的笔记软件,目前广受喜爱.由于通过Typora导入的图片不集中,图片要么在原始位置分散着,如果换台电脑图片就会丢失,默认是保存图片的原始绝对路径,而我 ...

  2. 认识Http协议(超文本传输协议)

    1.认识url url是统一资源定位符,是对互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址. 它的一般表现形式为: <协议>://<主机>:< ...

  3. ProtoBuf(protocol buffer) 网络传输协议

    ProtoBuf(protocol buffer) 网络传输协议 转自:http://blog.csdn.net/wenyiqingnianiii/article/details/52741312 P ...

  4. 图文教程:如何将电脑TXT文档传到iPhone5并阅读之(无需越狱)

    首先声明,本帖针对iPhone5小白用户的,老鸟勿喷. 相信很多未越狱的iPhone5用户会比较纠结一个问题,那就是iPhone官方阅读软件ibooks不支持TXT文档阅读,不越狱的前提下想传本小说到 ...

  5. 文档被外泄?如何有效管控文档拷贝行为

    随着网络的发展,U盘拷贝已是企业员工日常数据传输的工具之一,因其存储量大.使用简单.方便携带,给彼此工作带来极大的便利,但频繁使用也导致U盘传输数据存在诸多隐患: 员工使用私人U盘,企业核心数据有意或 ...

  6. 多可文档管理服务器,【多可文档管理系统怎么用】多可文档管理系统好不好_使用技巧-ZOL软件百科...

    1.丰富的传输方式 1)多可文档管理系统提供批量文档传输工具,可以一次批量导入文件,也可定时导入文件. 2)系统提供快速导入功能,可以在服务器端选择服务器路径快速导入超大批量文件,文档大规模导入. 3 ...

  7. 畅写Office云端SDK :“硬核”赋予企业应用在线文档I在线协作编辑I在线预览I在线格式转换服务

    畅写Office是北京稻壳互联数据科技有限公司旗下云端服务产品, 其云服务团队经过数月的努力,国内首次实现Office公有云SDK(类似微软Office365 SDK服务),以支持更多企业SAAS公有 ...

  8. 通过计算机名共享文档,共享文档

    共享文档的图标上面有个手,局域网里可以通过网上邻居来访问别人电脑上的共享文档. 中文名 共享文档 外文名 Share documents学    科 网络工程 领    域 工程技术 共享文档创建方法 ...

  9. 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构

    一.导语 办公文档是每个人日常频繁使用的工具,ppt.word.xls.wps.pdf等为我们工作和生活带来了很多的便利,本文介绍在云计算和智能手机时代,基于 智能媒体管理 的新型Cloud Nati ...

最新文章

  1. opencv中的push_back()函数
  2. 蓄电池容量和环境温度的关系
  3. SVN使用和解决方案
  4. 滑动窗口限流 java_Spring Boot 的接口限流算法优缺点深度分析
  5. 计算机 函数的应用,职称计算机:公式与函数的应用(2)
  6. Android Mms 数据库
  7. 【数据结构的魅力】002.单向、双向链表栈和队列递归
  8. 第七届蓝桥杯省赛--四平方和
  9. 二进制与格雷码相互转换
  10. HE4484E芯片资料
  11. Spring Data 数据库建模最佳实践
  12. 定量分析双花(双重支付)问题
  13. 电脑连接热点无internet访问权限_电脑连接无线网,显示无网络访问权限
  14. 微信小程序评论/留言功能,附:前端+后端代码+视频讲解!
  15. 函数模板、类模板(含模板特化)
  16. android一键 iphone,安卓手机一键变“iPhone”,这种App太过分了
  17. 国产手机设计业遭遇拐点 萧条期寻觅突围路
  18. 【java毕业设计】基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码)——超级玛丽游戏
  19. 在第一次使用德国小鸡要注意的地方
  20. 【转】搜狗开源内部项目管理平台Cynthia意欲何为

热门文章

  1. iviewUI选择下拉框,输入搜索词调用接口远程搜索
  2. 非华为电脑装华为电脑管家蓝屏和协同起不来的解决方案
  3. RT-Thread记录(十三、I/O 设备模型之PIN设备)
  4. storm 实战及实例讲解(一)
  5. [vue]插槽slot
  6. 在测试过程中,我们是如何去定位前后端问题的?
  7. mysql优化之覆盖索引
  8. 双c9计算机硕士在阿里待遇,阿里程序员感慨:硕士毕业五年,工资才一万六,感觉自己很失败...
  9. 关于三菱软件GX developer和GX works的安装注意点
  10. java dns 缓存_java实现清理DNS Cache的方法