总体概括来说就是设计一个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. ArcGIS 相同要素类的多Shp文件或多要素合并

  2. LAMP集群项目二 初始化系统

    1.关闭防火墙 /etc/init.d/iptables stop chkconfig iptables off 2.关闭selinux cat /etc/selinux/config #查看状态 s ...

  3. 解析oracle的rownum,数据库查询结果返回行数设置

    对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀 ...

  4. angular 2+ innerHTML属性中内联样式丢失

    通过属性绑定的innerHTML,把字符串里面的html解析 解析是没问题的,但一些内联样式会丢失掉 为了不丢掉样式,需要自定义一个管道来解决这个问题 html.pipe.ts import {Pip ...

  5. vue 二级列表折叠面板

    请求出来的数据是二级列表,需要点击一级列表展开相应的二级列表 data(){ return { info: [ {name:'一级菜单1',lists:[{price:1},{price:2}]}, ...

  6. Zabbix监控主动模式

    接上篇:Zabbix监控web,MySQL,TCP状态,Nginx 参考官方文档:https://www.zabbix.com/documentation/3.4/zh/manual zabbix默认 ...

  7. 20165330 2017-2018-2 《Java程序设计》第5周学习总结

    课本知识总结 第七章 内部类与异常类 内部类:类的一种成员 外嵌类:包含内部类的类称为内部类的外嵌类 二者关系: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. ...

  8. POJ3660 传递闭包———floyd算法

    POJ3660 Cow Contest 题目链接:http://poj.org/problem?id=3660 题意:农名约翰有些奶牛,约翰通过让他们决斗来决定他们的排名,约翰让这些奶牛一对一打完一定 ...

  9. PMP私有广告交易市场

    [资源]互联网广告新知:半小时读懂PMP私有广告交易市场是什么? https://socialbeta.com/t/resource-what-is-pmp.html SocialBeta | 201 ...

  10. arcgis server 无法手动删除切片

    背景 问题 场景如下: 切片放置在专门的文件服务器上,通过unc共享路径对外共享.文件服务器的OS为windows server2008R2 想手动更新切片服务的切片.发现同一切片服务,有的比例级别文 ...