Web服务器实现文件传输程序设计
总体概括来说就是设计一个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服务器实现文件传输程序设计的更多相关文章
- secureCRT连接服务器和文件传输( 一步搞定)
1.在百度云盘存有此工具,获取到后解压执行即可,如下2 连接目标服务器 192.xxx.xx.xx 2.secureCRT连接服务器和文件传输 ,现象如下 登录后切换到root用户即可有权限操作 ...
- Linux服务器间文件传输
利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...
- [js高手之路]node js系列课程-创建简易web服务器与文件读写
web服务器至少有以下几个特点: 1.24小时不停止的工作,也就是说这个进程要常驻在内存中 2.24小时在某一端口监听,如: http://localhost:8080, www服务器默认端口80 3 ...
- Linux 服务器之间文件传输
linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们需要获得远程服务器上 ...
- scp实现mac与linux服务器之间文件传输
1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile test@xxx.xxx.xxx.xxx:/test/ 2.ma ...
- ASP.NET Core Web API接收文件传输
ASP.NET解析API参数的方式有很多种,包括[FromBody],[FromForm],[FromServices],[FromHeader][FromQuery]. 文件传输方式也分很多种,包括 ...
- [server]阿里云服务器远程文件传输的解决方案
在今年6月份以前使用windows自带的远程桌面还可以畅快无阻地进行稍大文件的传输.但是后来就总是会蹦了.最近频繁使用,发现已经不能愉快地的传输文件了,就是挂载本地驱动器,只能传输很小,大概小于40M ...
- Linux连接Windows服务器以及文件传输方法
Ubantu系统上连接Windows服务器,操作步骤 安装rdesktop sudo apt-get install rdesktop 连接命令 rdesktop -f IP -r disk:mydi ...
- Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]
遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...
随机推荐
- uilabel 和uitextview 自适应大小
本文转载至 http://blog.csdn.net/liulichao20/article/details/8957752 分类: ios2013-05-21 22:06 321人阅读 评论(0) ...
- Django学习笔记第十篇--实战练习六--发送邮件
一.发送邮件需要引入的包依赖文件(Django1.8 Python2.7) from django.core.mail import send_mail,send_mass_mail 其中send_m ...
- c#基础 第四讲
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 让asp.net程序在修改web.config后不重启
默认情况下web.config修改后,asp.net程序会被重启.为了防止程序重启,要修改machine.config 文件. machine.config默认在C:\WINDOWS\Microsof ...
- POI导出EXCEL经典实现(转载)
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- uid-datepicker
$("#txtPODate").daterangepicker({singleDatePicker: true,showDropdowns: true,minDate:'01/01 ...
- git+sourcetree创建仓库
1.git上创建版本库 2.安装sourcetree 3.创建空目录 我本地空目录为D:/shenghuojia 4.打开sourcetree,点击clone/new ,选择clone reposit ...
- JDK的图文安装教程
JDK的安装 什么是JDK? JDK就是Java开发工具包,即Java Development Kit.就是做Java开发所需要的最基本的工具.包括Java编译器(把人使用的Java语言变成JVM能运 ...
- CH5202 自然数拆分Lunatic版【完全背包】
5202 自然数拆分Lunatic版 0x50「动态规划」例题 描述 给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复.求拆分的方案数 mod 2147483648的结 ...
- R语言中获取当前目录
# 获取当前工作目录 getwd() # 设置工作目录 setwd()