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命令这种不需要传输文件内容的命令采用“两次握手”的通信协议。

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

时间: 2024-08-08 21:57:06

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

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

遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是:(1)文件名称中含有不符合规范的字符,比如“:”,“?”或者空格等.(2)需要先创建文件夹目录再创建文件,不能直接创建文件. 2. android.os.NetworkOnMainThreadException异常,从服务器请求数据后,写入文件时报错 出错原因:在主线程内执行了访问http的操作,最

web服务器php-fpm文件分析

php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本.在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php.ini一样的配置风格. 1.php-FPM 提供了慢执行日志,可以将执行比较慢的脚本的调用过程 dump 到日志中.PHP 5.3.3 之前设置如下: <value name="request_slowlog_timeout">5s</value> <val

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

1.在百度云盘存有此工具,获取到后解压执行即可,如下2 2.secureCRT连接服务器和文件传输 ,现象如下 登录后切换到root用户即可有权限操作   su - 原文地址:https://www.cnblogs.com/yoyoblogs/p/11237036.html

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

web服务器至少有以下几个特点: 1.24小时不停止的工作,也就是说这个进程要常驻在内存中 2.24小时在某一端口监听,如: http://localhost:8080, www服务器默认端口80 3.要能够处理基本的请求:如get, post 在node js中创建一台服务器非常的简单,因为node自带http模块,该模块可以帮助我们非常快速搭建一台web服务器,来处理一个简单的请求. 1 const http = require("http"); 2 var server = ht

【c#源码】安卓客户端通过TCP通信与Windows服务器进行文件传输

APK文件  (对应的windows服务器端已经架设好,可以直接下载进行测试) 源码     数据库文件 在前面一篇文章:[源码]c#编写的安卓客户端与Windows服务器程序进行网络通信 中我们探讨了,如何通过xamarin技术,完成安卓客户端与Windows服务器的通信,这篇文章,我们探讨一下使用场景非常多的文件传输. 先谈一下为什么使用xamarin.android技术吧,之前有开发过一个公文系统,c#语言开发,服务器部署在Windows Server 2003上,客户端采用Winform

Linux服务器间文件传输

利用scp传输文件 1.从服务器下载文件 scp [email protected]:/path/filename /tmp/local_destination 例如scp [email protected]:/home/kimi/test.txt 把192.168.0.101上的/home/kimi/test.txt 的文件下载到 /tmp/local_destination 2.上传本地文件到服务器 scp /path/local_filename [email protected]:/pa

如何使用挂载磁盘和windows服务器进行文件传输?

如何远程连接windows服务器,相信对于使用过windows服务器的朋友来说这都是非常简单的事情,但是对于如何以及为什么挂载本地磁盘到windows服务器,很多新手就不明白为什么了.那么今天行云管家赵博士就来教大家怎样将本地磁盘挂载到到windows服务器上.首先:为什么要在windows服务器上挂载本地磁盘?这是为了方便本地文件上传到windows服务器上.比较落后的windows文件传输方式是通过ftp进行文件的上传和下载,但是ftp有操作复杂.传输速度慢.运行不稳定等缺点.如果我们将本地

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

1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFile test@xxx.xxx.xxx.xxx:/test/ 2.mac上传文件夹到linux服务器,与上传文件相比多加了-r scp -r 文件夹目录 用户名@服务器ip:目标路径 如:scp -r /Users/test/testFolder test@xxx.xxx.xxx.xxx:/test/ 3.linux服务器下载文件到mac scp 用户名@服务器ip:

FTP服务器实现文件传输

1.首先搭建ftp服务器,安装vsftpd #yum install -y vsftpd 2.查看vsftpd的目录: #rpm -ql vsftpd /etc/logrotate.d/vsftpd. vsftpd的日志文件 /etc/pam.d/vsftpd PAM认证文件 /etc/rc.d/init.d/vsftpd 启动脚本 /etc/vsftpd vsftpd的配置文件存放的目录 /etc/vsftpd/ftpusers 禁止使用vsftpd的用户列表文件 /etc/vsftpd/us