总体概括来说就是设计一个Web服务器的流程,将执行流程分为简单的步骤,每个步骤作为一个模块来实现。

1、整体设计

服务器程序发送文件给客户端或者从客户端接收文件,每次通信只能做一次文件传输,传输完毕后准备处理下一次通信。客户端程序,接收或者发送一个文件后就可以退出。因此,服务器短程序是一个死循环,处理一次之后不退出,继续监听。客户端程序处理一个连接就可以了。

2、客户端程序设计

客户端程序主要任务有3个,

(1)分析用户输入的命令

(2)根据命令向服务器端发出请求

(3)等待服务器返回请求的结果

第一个任务是分析命令,本FTP程序客户端给用户提供8种命令,如下表所示:

用户输入的命令

命令含义

get

从服务器得到文件

put

向服务器传输文件

cd

进入客户端的目录

!cd

进入服务器端的目录

ls

列出客户端当前目录的内容

!ls

列出服务器端当前目录的内容

connect

连接服务器

bye

退出程序

客户端通过标准输入得到一个字符串,分析字符串得到命令和参数,因此需要固定字符串的输入。固定好输入格式之后,客户端将字符串进行拆分判断来完成对应的功能。用户输入的每一个命令,都会通过客户端给服务器发送一个请求码,服务器端通过识别这个请求码来判断客户端的请求,从而进行处理。下面是用户输入的命令与对应请求的表:

用户输入的命令

对应的请求

get

GET

put

PUT

cd

不需要与服务器通信,无请求

!cd

CD

ls

不需要与服务器通信,无请求

!ls

LS

connect

发出连接请求,不需要服务器端额外处理,所以没有请求码

bye

BYE

3、服务器端程序设计

服务器程序与客户端程序类似,也是有3个任务。

(1)分析请求代码

(2)根据请求代码做出相应的处理

(3)等待返回结果或者应答信息

根据上边客户端的设计我们知道在服务器端对应需要处理的请求码只有5种,如下表所示:

请求代码

对应的处理

GET

向客户端传输文件

PUT

接受客户端的文件

CD

进入目录

LS

将当前目录内用传输给客户端

BYE

断开连接

分清楚任务之后,有两个主要环节需要明确,就是通信协议和服务器模型,本程序的通信协议分为两种。一种是get命令、put命令和!ls命令需要传输文件内容的命令,采用“四次握手”的通信协议;一种是!cd命令这种不需要传输文件内容的命令采用“两次握手”的通信协议。

服务器端使用并发服务器的模型,如果客户端发生阻塞,服务器依然能处理其他连接。

Web服务器实现文件传输程序设计的更多相关文章

  1. secureCRT连接服务器和文件传输( 一步搞定)

    1.在百度云盘存有此工具,获取到后解压执行即可,如下2 连接目标服务器 192.xxx.xx.xx 2.secureCRT连接服务器和文件传输 ,现象如下 登录后切换到root用户即可有权限操作    ...

  2. Linux服务器间文件传输

    利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...

  3. [js高手之路]node js系列课程-创建简易web服务器与文件读写

    web服务器至少有以下几个特点: 1.24小时不停止的工作,也就是说这个进程要常驻在内存中 2.24小时在某一端口监听,如: http://localhost:8080, www服务器默认端口80 3 ...

  4. Linux 服务器之间文件传输

    linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...

  5. scp实现mac与linux服务器之间文件传输

    1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile test@xxx.xxx.xxx.xxx:/test/ 2.ma ...

  6. ASP.NET Core Web API接收文件传输

    ASP.NET解析API参数的方式有很多种,包括[FromBody],[FromForm],[FromServices],[FromHeader][FromQuery]. 文件传输方式也分很多种,包括 ...

  7. [server]阿里云服务器远程文件传输的解决方案

    在今年6月份以前使用windows自带的远程桌面还可以畅快无阻地进行稍大文件的传输.但是后来就总是会蹦了.最近频繁使用,发现已经不能愉快地的传输文件了,就是挂载本地驱动器,只能传输很小,大概小于40M ...

  8. Linux连接Windows服务器以及文件传输方法

    Ubantu系统上连接Windows服务器,操作步骤 安装rdesktop sudo apt-get install rdesktop 连接命令 rdesktop -f IP -r disk:mydi ...

  9. Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]

    遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...

随机推荐

  1. ios开发之--PDF文件生成

    写项目的时候,碰到一个需求,就是在手机端根据指定的文件内容生成PDF文件,并可以保存到手机上,因为以前只是听说过,没有真正的去了解过这个需求,通过查阅资料,可以实现这个功能,话不多说,代码如下: -( ...

  2. Java Web项目--使用Servlet生成一个页面

    为了生成一个servlet对应的网页.我们需要新建一个web.xml,其中将会放置servlet的相关信息.web.xml文件放置在WebContent/WEB-INF/目录下.(我们在Eclipe中 ...

  3. kafka "HelloWorld"实践

    前面我们分别介绍了kafka的相关基本原理,kafka的集群服务器搭建以及kafka相关的配置,本文综合前面的理论知识,运用kafka Java API实现一个简单的客户端Demo. 开发环境 操作系 ...

  4. 前端性能优化-减少http请求,dns预解析,减少repaint和reflow

    前端性能优化方法: 一 . 减少http请求 (1)通过合并图片,减少请求,俗称css sprites(css精灵)css sprites (2)lazyload懒加载,在需要的时候再加载 1.定义: ...

  5. hibernate配置文件分析

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...

  6. 基于注解的形式配置Bean

    基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中 I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤: 1组件 ...

  7. Python全栈day28(描述符应用)

    描述符的使用 python是弱类型语言,及参数的赋值没有类型限制,下面通过描述符机制来实现类型限制功能 描述符应用1.py class Typed: def __get__(self, instanc ...

  8. Struts2中获取Web元素request、session、application对象的四种方式

    我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...

  9. PacificA: Replication in Log-Based Distributed Storage Systems

    PacificA: Replication in Log-Based Distributed Storage Systems - Microsoft Research https://www.micr ...

  10. Spark 源码分析 -- Stage

    理解stage, 关键就是理解Narrow Dependency和Wide Dependency, 可能还是觉得比较难理解 关键在于是否需要shuffle, 不需要shuffle是可以随意并发的, 所 ...