CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  CGI

我做的一款小型的WebServer,绿色软件,请大家帮忙测试一下

楼主baojian88888(机器人)2006-03-13 13:05:50 在 Web 开发 / CGI 提问

软件名称:    
  ==========  
  EasyWebServer网站服务器   V1.5  
   
   
  软件功能:  
  ==========  
  这是一款小型的Web服务器软件。它可以很快速地在您  
  的PC上创建一个站点,而无需IIS等庞大复杂的工具。  
  它的主要功能特点如下:  
   
  ◇   遵循HTTP/1.1协议标准  
  ◇   支持CGI/1.1,支持ISAPI及缓存ISAPI  
  ◇   支持自定义端口、最大连接数、网络超时  
  ◇   支持自定义缺省文档列表,支持目录浏览  
  ◇   支持中文UTF-8编码  
  ◇   支持Cookie,支持SOAP等  
  ◇   支持多线程文件下载、断点续传  
  ◇   支持访问日志记录  
  ◇   极少的资源占用,极快的访问速度,极简单的设置  
  ◇   绿色软件,无须安装,不写注册表  
  ◇   VC++   SDK   编写,体积超小  
   
   
  使用说明:  
  ==========  
  1.   设置好主目录、端口号等参数后,启动服务器  
        点右键菜单--“浏览主页”,就可以在浏览器中看到效果了  
  2.   如果要执行CGI/ISAPI程序,注意要选中设置中的CGI/ISAPI权限  
   
  在Demo子目录下有CGI、ISAPI的演示(包含一个CGI的留言本),详见Demo\readme.txt  
   
   
  欢迎您的测试,并提出您的宝贵意见和建议!  
   
  软件下载  
  华军软件园:http://www.onlinedown.net/soft/47720.htm  
  编程爱好者:http://www.programfan.com/wysoft/showwysoft.asp?id=1491  
   
  问题点数:100、回复次数:11Top

1 楼newzy()回复于 2006-03-14 12:03:06 得分 10

不错,   在这么短的时间内做到这个程序很不容易.  
   
  我对这个WebServer   CGI   方面进行了一些测试,   结果还比较满意的.    
  只是   CGI   文件扩展名只支持   .exe   的,   这样会导致在浏览器上第次都会显示下载输出结果的对对话框.   所以对   .cgi   的扩展名支持是很有必要的.  
   
   
  另外,   我用   CSP   (C   语言直接插入到   HTML中)   实现了下你的   demo   示例中的留言板(viewmsg.exe),   内容稍作了些改动,   把源码分享给大家,   包括四个文件:  
   
  =============   review.csp   =============    
   
  <HTML><HEAD><TITLE>留言本</TITLE>  
  <META   http-equiv=Content-Type   content="text/html;   charset=gb2312">  
  <STYLE>P   {  
  size:   6pt  
  }  
  .title   {  
  COLOR:   #ffb6c1  
  }  
  </STYLE>  
   
  <META   content="MSHTML   6.00.2900.2180"   name=GENERATOR></HEAD>  
  <BODY>  
  <P><SPAN   class=title>  
  <CENTER>  
  <H1>留   言   本</H1></CENTER></SPAN>  
  <P></P>  
  <CENTER>  
  <TABLE   style="FONT-SIZE:   9pt"   cellSpacing=0   borderColorDark=#ffffff    
  cellPadding=0   width=650   borderColorLight=#c0c0c0   border=1>  
      <TBODY>  
  <%    
  @include   "../usr/db.h"  
  {  
  RECORD record;  
  void   * fp;  
   
  fp   =   open_db("rb+");  
   
  while(1)    
  {  
  if   (db_read_next(fp,   &record)   <=   0)  
  break;  
  %>  
      <TR   bgColor=#dadada   height=20>  
          <TD>作者:   <%   =   (record.name)   %>   </TD>  
          <TD>性别:   <%   =   (record.sex)   %>   </TD>  
          <TD>邮件:   <%   =   (record.mail)   %>   </TD>  
          <TD>时间:   <%   =(record.now)   %></TD></TR>  
      <TR   height=50>  
          <TD   colSpan=4><xmp><%   =   (record.msg)   %></xmp></TD></TR>  
  <%  
  }   /*   for   */  
   
  close_db(fp);  
  }  
  %>  
  </TBODY></TABLE></CENTER>  
  <FORM   action=<%   =cgiPrefix(NULL)   %>/store.csp   method=post>  
  <CENTER>  
  <P>姓名:   <INPUT   name=name>    
  <P>性别:   <INPUT   type=radio   value=0   name=sex>女性    
      <INPUT   type=radio   value=1   name=sex>男性    
  <P>EMail:<INPUT   name=email   type=?Text?>    
  <P>我要留言:</P><TEXTAREA   name=content   rows=10   cols=95></TEXTAREA>    
  <P><INPUT   type=submit   value="发   表">    
   
  <INPUT   type=reset   value=清除重写></P>  
  </CENTER>  
  </FORM>  
  </BODY></HTML>  
   
   
  =============   store.csp   =============    
   
  <html>  
  <head>  
  <meta   http-equiv="refresh"   content="1;   url=<%   =cgiPrefix(NULL)   %>/review.csp">  
  <title>正在跳转...</title>  
  </head>  
  <body>  
  <%  
  @include   "../usr/db.h"  
  @include   <time.h>  
  {  
  RECORD record;  
  void   * fp;  
  time_t   t;    
   
  memset(&record,   0,   sizeof(record));  
   
  if   ( '\0'   ==   (strncpy(record.name,   getParameter("name"),   sizeof(record.name)-1))[0]   ||  
  '\0'   ==   (strncpy(record.sex,   getParameter("sex"),   sizeof(record.sex)-1))[0]   ||  
  '\0'   ==   (strncpy(record.mail,   getParameter("email"),   sizeof(record.mail)-1))[0]   ||  
  '\0'   ==   (strncpy(record.msg,   getParameter("content"),   sizeof(record.msg)-1))[0]   )  
  {  
  ebprintf(ebfp,   "'名称/性别/Email/内容'   均不能包为空");  
  }    
  else    
  {  
  /*   get   time   */  
  t   =   time(NULL);  
  strftime(record.now,   sizeof(record.now)-1,    
  "%Y-%m-%d   %H:%M:%S",   localtime(&t));  
  /*   convert   sex   */  
  if   (!strcmp("0",   record.sex))  
  strcpy(record.sex,   "女");  
  else  
  strcpy(record.sex,   "男");  
   
  fp   =   open_db("ab+");  
  db_insert(fp,   &record);  
  close_db(fp);  
   
  ebprintf(ebfp,   "留言成功,正在跳转...");  
  }  
  }  
  %>  
   
  </body>  
  </html>  
   
   
  =============   db.h   =============    
   
  #ifndef   _INC_DB_H_  
  #define   _INC_DB_H_  
   
  #define   DB_NAME "msg.db"  
   
  typedef   struct   {  
  char   name[16];  
  char   sex[16];  
  char   mail[16];  
  char   now[24];  
  size_t   msg_len;  
  char   msg[512];  
  }   RECORD;  
   
   
  extern   void   *   open_db(char   *   mode);  
  extern   int   close_db(void   *   fp);  
  extern   int   db_read_next(void   *   fp,   RECORD   *   rcd);  
  extern   int   db_insert(void   *   fp,   RECORD   *   rcd);  
   
  #endif   /*   _INC_DB_H_   */  
   
  =============   db.h   =============    
   
  #include   <stdio.h>  
  #include   <string.h>  
   
  #include   "db.h"  
   
  /*    
  open   data   base    
  */  
  void   *   open_db(char   *   mode)  
  {  
  FILE   *   fp;  
   
  fp   =   fopen(DB_NAME,   mode);  
   
  return   fp;  
  }  
   
  /*    
  close   data   base    
  */  
  int   close_db(void   *   fp)  
  {  
  if   (NULL   !=   fp)  
  fclose(fp);  
   
  return   0;  
  }  
   
  /*    
  read   record   from   base    
  */  
  int   db_read_next(void   *   fp,   RECORD   *   rcd)  
  {  
  size_t len;  
   
  if   (NULL   ==   fp)  
  return   -1;  
   
  if   (feof((FILE*)fp))  
  return   0;  
   
  memset(rcd,   0,   sizeof(RECORD));  
   
  /*   read   header   */  
  len   =   sizeof(RECORD)   -   sizeof(rcd->msg);  
  if   (len   !=   (int)fread(rcd,   1,   len,   fp))  
  return   -1;  
   
  /*   read   message   body   */  
  if   (rcd->msg_len   !=   fread(rcd->msg,   1,   rcd->msg_len,   (FILE*)fp))  
  return   -1;  
   
  return   sizeof(RECORD);  
  }  
   
  /*    
  insert   record   to   data   base    
  */  
  int   db_insert(void   *   fp,   RECORD   *   rcd)  
  {  
  size_t len;  
   
  if   (NULL   ==   fp   ||   fseek(fp,   0,   SEEK_END))  
  return   -1;  
   
  /*   write   header   */  
  rcd->msg_len   =   strlen(rcd->msg);  
  len   =   sizeof(RECORD)   -   sizeof(rcd->msg);  
   
  if   (len   !=   fwrite(rcd,   1,   len,   (FILE*)fp))  
  return   -1;  
   
  /*   write   message   body   */  
  if   (rcd->msg_len   !=   (fwrite(rcd->msg,   1,   rcd->msg_len,   (FILE*)fp)))  
  return   -1;  
   
  return   sizeof(RECORD);  
  }  
   
  Top

2 楼limlzm(凡叶)回复于 2006-03-14 15:43:23 得分 10

markTop

3 楼haolee(haohao)回复于 2006-03-16 23:48:30 得分 10

都是好东西,   收下了,   继续关注中...Top

4 楼czq9966(宁录)(毛主席领导咱闹革命……)回复于 2006-03-17 01:22:47 得分 10

UPTop

5 楼boydream(show me the money!)回复于 2006-04-04 10:27:53 得分 10

study~~~Top

6 楼223xh(大头菜)回复于 2006-04-04 10:50:29 得分 10

支持jsp和.net吗?Top

7 楼eglic(圪圪) (理由永远是谎言,信仰永远是自慰)回复于 2006-04-04 10:58:19 得分 10

看过了,非常不错  
   
  Top

8 楼winter911(药师)回复于 2006-04-23 08:02:40 得分 10

纯情顶Top

9 楼redapple2008()回复于 2006-04-25 15:52:26 得分 10

楼主厉害,学习Top

10 楼baojian88888(机器人)回复于 2006-05-23 09:34:27 得分 0

感谢各位的支持,感谢newzy的建议  
   
  《EasyWebServer网站服务器》   V1.6   已经发布  
  1.   修正了一些Bug  
  2.   初步实现了对PHP的支持Top

11 楼soft_2008(冬天到了,春天还远吗?)回复于 2006-06-17 15:41:20 得分 10

-   -Top

相关问题

  • 我做的一款小型的WebServer,绿色软件,请大家帮忙测试一下
  • 小型OA,兄弟姐妹们帮忙测试一下
  • 谁来帮我测试一下我写的软件(绿色软件)
  • 测试测试
  • 测试
  • 测试!
  • 测试、
  • 测试!!!!!
  • 测试a
  • 测试

关键词

  • .net
  • db
  • record
  • sex
  • strncpy
  • getparameter
  • fp
  • sizeof
  • time

得分解答快速导航

  • 帖主:baojian88888
  • newzy
  • limlzm
  • haolee
  • czq9966
  • boydream
  • 223xh
  • eglic
  • winter911
  • redapple2008
  • soft_2008

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo