一个简单HTTP服务器程序在Linux下的C实现.doc_第1页
一个简单HTTP服务器程序在Linux下的C实现.doc_第2页
一个简单HTTP服务器程序在Linux下的C实现.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一个简单HTTP服务器程序在Linux下的C实现曹玮(3004204123) 天津大学计算机学院04级5班1 实验目的: 了解套接字(socket)实现原理,阅读Linux或者FreeBSD网络部分的源程序。 在某一种平台(Linux,Unix系列或Windows系列)下进行网络客户机-服务器编程。2 程序要求:编写一个多线程服务器程序,主线程通过非80端口监听连接请求,要求server能够显示客户端请求消息的内容,如果遇到错误,server能够区分几种基本错误类型,并回应客户端相应错误信息,客户端可以用浏览器或者自己编程实现。要求用C/C+ 实现。3 程序简介:本程序(MyServer v0.0.1)是一个在Linux RedHat 9 下开发的命令行模式程序。启动后通过配置,可监听大于1024的任意指定端口,如有浏览器或其他程序对该端口发出http 的 GET请求,则程序产生子进程通过TCP套接字向请求方发送所需文件,而主程序继续监听。当程序截获到用户发出的SIGINT信号后,程序向屏幕打出退出信息,然后自动退出。(在程序运行于前台时,可用ctrl + c; 后台运行时,可以先通过ps ef 命令查看进程的PID,进而用kill命令将其结束。)本程序支持传送HTML以及HTM形式的文档,以及JPEG和GIF格式的图片。在发送这些消息之前,会加上头信息。当遇到错误请求时,会给出应答(如404号错误)。本程序的结构采用了模块形式,降低了程序的耦合性,易于维护。并且有比较好的可读性。缺点和一些有待改进的地方:主要表现在由于是在Linux环境下编写的纯C语言程序,因而缺少一个图形用户前端,这使得操作程序比较繁琐。另一点是目前程序支持的文件格式还比较少(这是因为在程序中加了一定限制),在传输图片时,由于需要在发送前预知其大小,因而采用了将文件整体读入内存的方式,这种方式使得在处理比较大的数据时(比如大的图片),会不能成功传送。这都是亟待改进的地方。4 程序原理及主要技术 这里想说的主要是多线程相应请求的技术。 在Unix/Linux 环境下,实现多线程同步有很多方式,本程序采用了最简单也最容易理解的形式,即用fork()系统调用。首先在主进程里创建套接字,并监听相应端口是否有请求,一旦发现请求,则立即用fork产生一个子进程,用来相应请求;主进程则继续监听。子进程完成发送后即退出结束。整个过程就变得十分清晰了。由于linux在处理fork的进程是采用复制资源的方式,因而套接字的共享就比较简单的得以实现了。再有就是通过配置文件保存用户对端口号和主目录的配置信息。这个以隐藏文件出现的文件在安装程序时生成,就在默认安装路径/usr/local/bin下。它保存了上一次用户通过-c选项配置的主目录和端口号。默认情况下,端口号为8080,主目录是运行程序的当前目录(也就是说将网页文件放在这个目录下)。5 程序流程图:6 主要函数及功能:请参看代码注释。7 其他说明:1.本程序在Linux Redhat 9 下编译运行成功,测试浏览器为Mozilla浏览器。程序的二进制代码附在压缩包中,但由于Linux个发行版之间可能存在兼容性问题,因此建议在测试时,安装压缩包中提供的tar 包,具体方法见readme.html。2.本程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论