毕业论文基于linux的ftp服务器的研究与实现内容摘要:
导入配件 创建守护进程 创建共享内存并且进行初始化 创建数据进程并进入相应的函数进行处理 创建套接字并监听 接收客户端连接创建新的套接字 是否接受该用户的连接 创建子进程并处理该用户 开始 结束 基于 Linux的 FTP 服务器 9 进程的启动 在 Linux环境下编程可以利用一个很好的工具,这个工具就是功能非常强大的 SHELL,在 Linux 中 SHELL 是“ Bash”。 Bash 的优点是命令补全功能,命令历史(就是正常退出登录时会自动保存历史文件),而且重点是可以在前台或者 后台执行。 为了节省系统资源,我用脚本的形式写的进程启动可以再后台默默的执行而不打扰其它进程的执行。 而所谓的SHELL 是一个交互式命令解释器和一种命令编程语言,采用的语法和 C 编程语言及其相似,只是写的字母顺序相反,是交互式地从终端键盘或者是从一个文件来执行命令的。 因此 SHELL 不仅可以用来执行命令,还可以用来编写程序,并且它使用的是解释型语言,对其调度相对 C 语言来说比较容易 [9]。 不仅如此,使用 SHELL 进行程序编程可以简单的完成一些小任务,同时就算是最古老的版本的 Linux 也会在安装中提供一个 SHELL,所以用 SHELL 编写出来的脚本易于移植。 以下是本课题 FTP 服务器项目中所写的启动,停止,重起服务器的 SHELL 脚本。 !/bin/bash //为本脚本解析使用哪种 shell 来解释一下的代码 Source function library.//源程序的库函数 . /etc/ Source working configuration.//网络状态 . /etc/sysconfig/work Check that working is up.//检查网络是否连接 ${NETWORKING}是一个数组 [ ${NETWORKING} = no ] amp。 amp。 exit 0//0 表示正常退出 1 表示异常退出 [ x /usr/local/bin/hfftpd ] || exit 0 RETVAL=0//一个标志位 prog=hfftpd//进程名字 start(){ echo $Starting $prog... /usr/local/bin/hfftpd /etc/hfftpd/amp。 daemon true//这句 daemon true 是指要用 service hfftpd start 这种方式启动脚本,注意脚本要拷贝到 /etc/,并且没有 .sh 后缀 RETVAL=$? echo return $RETVAL } stop(){ echo $Shuting down $prog... killproc $prog 3 //这句是为了删除共享内存而设置的,如果不删除就会消耗系统资源。 福州大学阳光学院本科生毕业设计(论文) 10 RETVAL=$? echo return $RETVAL } case $1 in start) start。 stop) stop。 restart) stop echo $prog starting... sleep 1。 start RETVAL=$?。 *) echo $Using as: $0 start|stop|restart exit 1 Esac exit $RETVAL 其中 是注释的意思。 系统通过 case 程序中的 $1 的参数只能允许为 start,stop,restart,来判断得到哪一个参数而做其所对应的工作。 如果是“ start”的时候,系统会根据 RETVAL的值判断是不是第一次启动,如果 RETVAL 是 0那么就是还未被启动,因此系统允许启动服务器,如果不是就提示服务器已经启动的字眼。 当参数如果是“ stop”命令时,就先把所有 main 进程关闭并向每个主函数进程发送 SIGQUIT,和 SIGKILL 信号( SIGQUIT 是退出信号, SIGKILL 是杀进程的信号), SIGQUIT 信号在 main 进程中都对它们进行了安装 ,处理函数中有对它们的进行处理,如果是 restart 命令时要先关闭进 程再启动 main 进程也就是重启。 基于 Linux的 FTP 服务器 11 守护进程的实现 Linux 系统在启动过程中会开启很多后台服务和进程,而其中运用的一个重要技术就是守护进程。 守护进程是生存期很长的一种进程,它会自动转到后台运行而且脱离与终端的联系不受终端的控制, 为了能够等待解决一些事件的发生,它执行任务的时候是用周期性重复的执行方式 , 因此为了避免挂起,我在 FTP 也创建了一个守护进程来守护本 FTP服务器。 创建守护进程的关键步骤如下 : ( 1) 在后台实现 要实现守护进程在后台实现,就必须让守护进程不被挂起,采用的方法是调用 fork()函 数让父进程结束,这样守护进程就会作为子进程在后台运行。 ( 2) 脱离控制终端,登录会话和进程组 虽然守护可以在后台运行,但是调用 fork()函数后产生的子进程的所拥有的资源是继承父进程,包括其进程组、登录会话、控制终端等,而这些是可以被系统收回的。 为了能够让守护进程独立出来,不受控制就可以调用 setsid()函数, setsid()函数的主要功能就是使进程成为新的进程组长和会话组长,这样就能够从父进程那边继承下来的登录会话和进程组真正脱离。 ( 3) 禁止进程重新打开控制终端 通过上面的设置进程就可以脱离控制终端限 制,但是它仍然可以向系统申请一个新的控制终端,这样有了控制终端又会受到控制,为了避免这种情况,就要使进程不能成为会话组长。 ( 4) 关闭打开的文件描述符 因为在 fork()一个子进程的同时,子进程会创建它的父进程那里复制一份文件描述符。 而守护进程是一直在后台默默的运行的,只要不杀死它就不会停止运行。 关闭文件描述符不仅可以避免系统资源浪费,并且可以防止进程所在的文件系统因文件描述符一直存在而无法卸下导致的问题发生。 ( 5) 改变当前工作目录 Linux 规定进程的工作目录在其运行的时候是不允许被卸下的,如果把进程的 工作目录放到自定义的目录的话,可能会出现被关闭而卸下的情况。 因此,最好把进程的工作目录改到系统的特定目录下,这样就不会被常规操作卸下。 ( 6) 重设文件创建掩模 因为子进程的资源是从父进程那边继承下来的,它会继承文件创建掩模使守护进程所创建的文件存取位被修改。 因此要把这个文件创建掩模清除,自己再重新创建一个掩模。 ( 7) 处理 SIGCHLD 信号 进程结束的时候,系统会发出 SIGCHLD 信号。 服务器进程 在请求到来生成子进程处理请求时, 子进程可能会成为僵尸进程导致系统资源消耗,因为父进程可能先于子进程结福州大学阳光学院本科生毕业设计(论文) 12 束 [10]。 所以在这里要对这个信号进行一定的处理。 具体代码在附件中。 工作模式的实现 FTP 的过模式主要主动模式 (port)好被动模式 (pasv),两种模式的模型如图 43 所示。 (1)我打开了 N 端口,你来连接我吧 (1)我打开了 N 端口你来连接吧 (2)我主动来连接你的 N 端口 (2)我来连接你 图 43 potr(左 )pasv(右 )的模型 由图可知, FTP 的主动模式主要是首先客户端发送了连接请求,然后服务端接收到请求后由服务端主动连接客户端的一种工作模式。 而被动模式的模型和主动正好相反,是先客户端发送了连接请求,然后服务端把自己的 IP 和端口号发给客户端,由客户端来连接服务端的一种工作模式。 基于以上的工作模式本实现方法是:首先,先写一个测试函数通过data_conn_sock 的返回值量来判断, data_conn_sock 的返回值是通过客户端那边发送过来的命令被服务端截取之后和“ port”与“ pasv”比得出结果的。 然后,如果是主动连接的时候,就把从客户端得到的 IP 和端口号放入到哈希表里面,用于以后的 IP 连接数控制。 如果测试到被动连接的时候要客户端的 IP 和端口号从配置文件中获取出来当然也可以通过自己写的一个功能函数 get_host_ip()功能是获取 IP,并且通过系统函数 getsocketname 在还没调用 bind 之前绑定 0 端口得到系统内存分配的一个还没被使用的端口号 ,然后把点分十进制的 IP 和后面的端口号以“ ,”的形式组装出来给一个临时变量发送给客户端,所以当客户端接收到 例如 PORT 192,168,203,5,9,91 它表示客户端的 IP 地址是 ,端口是9*256+91[11]。 然后创建一个新的套接字,并设置 IP 和端口地址重用,用来绑定和监听客户端是否连接进来。 最后进入数据连接进程里面进行处理。 测试函数的流程图 44 如下: FTP 服务端 FTP 客户端 FTP 服务端 FTP 服务端 基于 Linux的 FTP 服务器 13 否 是 否 否 是 图 44 测试函数流程图 监控模块的实现 本系统的监控模块主要设计了以下内容,其中第一和第二两点是重点内容,第三点基本的 FTP 服务器都有。 限制上传,下载速度;限制 每 IP 连接最大数及总 IP 连接数;统计上传下载的文件个数及大小。 在监控模块中我用到的知识点主要有信号量的使用,共享内存的使用和哈希表的 使用。 首先信号量在这里相当于一个标志,就是 IP 是否已连接的标志,而共享内存中存放的是 IP 的总连接数,即总共有几台主机连到了服务端。 而哈希表在这里的主要作用是通过一个进程号找到 IP 地址,再通过 IP 地址找到目前为单 IP 的连接数。 限制上传,下载速度的实现 在配置文件中我设置了一个文件上传和下载的最大速度,这个主要是为了防止用户上传下载出现异常的情况。 上传下载速度的限制的主要思想是用一个变量保存当前下载或是上传多少个字节了,当达到配置中限制的最大速度(单位字节每秒)时让其睡眠一秒钟。 这样就达到了上 传下载的速度限制。 那么如何计算当前的上传和下载的字节数呢。 这就是判断是否为port 接受上传的命令 创建套接字 SOCKK 创建套接字接收客户端的连接 返回值 data_conn_sock 为创建的新连接返回的套接字 绑 定 是否成功 监听 返回值创建的新连接返回的套接字 开始 结束 福州大学阳光学院本科生毕业设计(论文) 14 我下面要讲的重点内容。 首先打开文件,验证是否断点续传,然后安装时钟信号处理函数,之后每隔一秒发送一次时钟信号,接着进行数据的传输,在此记下传输总字节数的大小,然后通过信号函数处理计算出此时的速度,与配置文件里面的相比,如果偏大了就休眠一秒,以此达到速度的限制。 最后结束的时候是对共享内存的空间进行操作。 信号处理函数计算实时速度的代码在附件中,这里不做详细描述。 单 IP 连接数和总连接数的控制实现 对单 IP 连。毕业论文基于linux的ftp服务器的研究与实现
相关推荐
将机械、气动、电气控制、电机传动、传感检测、 PLC 以及工业网络控制技术有机进行整合,结构模块化,便于组合,可以完成各类单项技能训练和综合性项目训练。 可以进行机械部件安装与调试、气动系统的安装与调试、电气控制电路的安装和 PLC 编程、机电设备安装与调试、自动控制系统安装与调试、工业网络控制系统 安装与调试于一体。 ( 2) 系统采用统一标准接口,具有很高的兼容和扩展性
1 0 0 0 0 1 1 图形区首址 D1 低字节 D2 高字节 0 1 0 0 0 0 1 1 图形区宽度 (字节数 )D1=字节数 D2=00H 显示方式设置 无 1 0 0 0 0 0 0 0 逻辑“或”合 成 1 0 0 0 0 0 0 1 逻辑“异或”合 成 1 0 0 0 0 0 1 1 逻辑“与”合 成 1 0 0 0 0 1 0 0 文本特征 显示开关 无 1 0 0 1 N3
仍会出现许多使用不当之处,结果没有充分发挥该钢所具有的 性能潜力,造成大量浪费。 其中,因热处理工艺的制订及操作不合理而引起工件开裂是一种常见现象。 研究内容 太原工业学院毕业设计 4 本次课题主要是研究在不同的热处理工艺下对 T8 钢进行材料力学性能的测定。 这其中包括了对试样进行显微组织的观察。 进行拉伸试验,测定 T8 钢的屈服强度、抗拉强度和材料的塑韧性变化。
少 Access 的功能(表单,报告,序列和 VB代码)可以用作其他数据库的后期应用,包括 JET(档案为主的数据库引擎, Access 缺省使用)、Microsoft SQL Server、 Oracle 和任何其他跟 ODBC 兼容的产品。 这种方法允许开发者把一个成熟的应用的数据移动到一台更大功率的服务器而没有已经在适当的位置牺牲发展。 数据库软件: microsoft office
,可由七个系统或机构组成 [5]:( 1)成型零件:主要包括凹模、凸模、型芯、镶拼件,各种成型杆与成型环;( 2)浇注系统( 3)导向和定位机构;( 4)脱模机构:主要由顶杆、顶出板、回程杆、顶出固定板、拉料杆等组成;( 5)侧向分型抽芯机构;( 6)温度调节系统;( 7)排气系统。 技术名称 发达国家 中国 美国 日本 德国 香港 台湾 大陆 CAD 应用 CAE 应用 Flow 软件
查询模块、 售票 模块、退票模块、口令修改模块等。 登陆模块 实现售票员通过正确密码登录系统才能进行各项操作;按车次查询 模块 实现输入车次全称或者是车次代号的一部分既能检索出符合条件的车次信息;按车站 查询模块 可以查询出所有经过车站的的车次;售票 模块 实现售票功能; 退票模块 实现退票功能; 口令修改模块 实现用户的密码修改功能; 同时本文还分析了软件工程、数据库技术的相关理论。