8.23 http server 项目

xinetd:负责http底层的传输

第一步:

在/etc/xinetd.d下创建  micro_httpd文件

sudo vim micro_httpd

  1. service micro_httpd
  2. {
  3. socket_type = stream
  4. protocol = tcp
  5. wait = no
  6. user = liuwei
  7. server = /home/liuwei/http_protect/micro_httpd
  8. server_args = /home/liuwei/www
  9. disable = no
  10. flags = IPv4
  11. }

第二步:sudo  vim  /etc/services

在文件的最下面添加两句话

micro_httpd 8080/tcp

micro_httpd 8080/udp        #Micro HTTP  SERVER

第三步 : 重启xinetd

sudo  /etc/init.d/xinetd restart

参考资料:

1.sudo aptitude install xinetd命令安装xinetd工具

2.sudo vi /etc/xinetd.d/micro_httpd创建micro_httpd文件并打开写入如下内容:

service micro_httpd

{

socket_type     = stream

protocol        = tcp

wait            = no

user            = whoami

server          = /home/whoami/http-project/micro_httpd

server_args     = /home/whoami/mh_html

disable         = no

flags           = IPv4

}

【特别注意】:文件名是micro_httpd而不是micro_httpd.conf

‘=’左边是tab,右边是一个空格

3.sudo vi /etc/services打开该文件,加入如下两行:

micro_httpd 2222/tcp #Micro HTTP server

micro_httpd 2222/udp #Micro HTTp server

4.sudo service xinetd restart重启xinetd

(以前是使用sudo /etc/init.d/xinetd restart, 是否互通待验证)

6.使用http://localhost:2222访问/home/whoami/mh_html下面的内容

项目实战:

改变工作目录  chdir

chdir("home/liuwei/demo");

然后可以fopen 创建

获取当前时间

获取文件属性

linux命令:stat   123.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <sys/types.h>
  6. #include <dirent.h>
  7. #include <sys/stat.h>
  8. #include <unistd.h>
  9. void sys_err( char * str)
  10. {
  11. printf( "%s\n" , str);
  12. exit(-1);
  13. }
  14. void show_dir(char * pathname , char * p)
  15. {
  16. struct dirent * ptr;
  17. struct stat buf;
  18. DIR * dir = opendir(pathname);
  19. if( dir == NULL)
  20. sys_err("open dir error!");
  21. printf("<style>a{color:black;}.dir{color:red;font-size:25px;text-decoration:none}span{color:purple}td{width:25%%;text-align:left;}tr{height:35px}</style><table>");
  22. while( (ptr = readdir(dir)) != NULL )
  23. {
  24. if(ptr->d_name[0] == ‘.‘)
  25. continue;
  26. char tmp[1024] , css[10] = "dir";
  27. strcpy(tmp , pathname);
  28. strcat(tmp , "/");
  29. strcat(tmp , ptr->d_name);
  30. stat(tmp, &buf);
  31. if(strcmp( p , "/") == 0)
  32. p[0] = ‘\0‘;
  33. if(S_ISDIR(buf.st_mode) == 0)
  34. css[0] = ‘\0‘;
  35. printf("<tr><td><a class=‘%s‘ href=‘%s/%s‘>%s</a></td><td>%s</td><td>%d</td></tr>",css,p,ptr->d_name,ptr->d_name,ctime(&buf.st_atime),(int)buf.st_size );
  36. }
  37. printf("</table><br/><hr/><span>apache_httpd</span>");
  38. fflush(stdout);
  39. exit(0);
  40. }
  41. void show_file( char * buf)
  42. {
  43. FILE *fp;
  44. char * p = NULL , ch;
  45. char pathname[50] = "/home/liuwei/www";
  46. if((p = strtok( buf , " ")) && (p = strtok(NULL , " ")))
  47. {
  48. struct stat buf;
  49. if( strcmp( p , "/") == 0)
  50. show_dir(pathname , p);
  51. strcat(pathname , p);
  52. stat(pathname, &buf);
  53. if(S_ISDIR(buf.st_mode))
  54. show_dir(pathname , p);
  55. fp = fopen( pathname , "r");
  56. if(fp == NULL)
  57. printf("404 not found\n");
  58. else
  59. {
  60. //printf("HTTP/1.1 200 OK\r\n");
  61. //printf("Content-Language:zh-ch\r\n");
  62. //printf("Content-Type:text/html;charset=utf-8\r\n\r\n");
  63. while(fread(&ch, sizeof(ch),1,fp) != 0 )
  64. fwrite(&ch,sizeof(ch),1,stdout);
  65. }
  66. }
  67. fflush(stdout);
  68. fclose( fp );
  69. }
  70. void write_log( void )
  71. {
  72. char buf[8192];
  73. time_t t ;
  74. int i = 1;
  75. FILE * fp = fopen("log.txt","a");
  76. if( fp == NULL )
  77. sys_err("fopen log.txt error");
  78. time(&t);
  79. fputs( ctime(&t) , fp);
  80. fputs( "-----------------------\n" , fp);
  81. while(( fgets(buf,sizeof(buf),stdin) != NULL ) && strlen(buf) != 2)
  82. {
  83. fputs( buf , fp );
  84. if(i++ == 1)
  85. show_file( buf );
  86. }
  87. fprintf( fp , "\n");
  88. fclose( fp );
  89. }
  90. int main( int argc , char * argv[])
  91. {
  92. if(chdir("/home/liuwei/http-project/"))
  93. sys_err("change dir error");
  94. write_log();
  95. return 0;
  96. }

Makefile:

  1. all:clean httpd
  2. @echo "123456"
  3. sudo /etc/init.d/xinetd restart
  4. httpd:
  5. gcc liuwei_httpd.c -o liuwei_httpd
  6. clean:
  7. rm -rf liuwei_httpd log.txt

来自为知笔记(Wiz)

时间: 2024-12-10 12:56:22

8.23 http server 项目的相关文章

HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置

我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 为什么会出现以上错误? 在IIS7的应用程序池有两种模式,一种是“集成模式”,一种是“经典模式”. 经典模式 则是我们以前习惯的IIS 6 的方式. 如果使用集成模式,那么对自定义的httpModules 和 httpHandlers 就要修改配置文件,需要将他们转移到<modules

HTTP 错误 500.23 - Internal Server Error

HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. IIS8.0详细错误 老版本WEB程序用 VS2013打开时报的错误 解决方法,在节点system.webServer中添加 <validation validateIntegratedModeConfiguration="false" /> 禁止验证集成模式,来避免错误.IIS7及以上版本配置应用程序池,将程序池的模式改为"

Bentley ProjectWise v8i 08.11.05.16 Admin+Server 项目协同系统

Bentley ProjectWise v8i 08.11.05.16 Admin+Server 项目协同系统 Bentley ProjectWise V8i v08.11.11.590 Admin 1CD Bentley ProjectWise V8i v08.11.11.590 Server 1DVD Bentley ProjectWise for TriForma v8 8.00.02.08 ProjectWise项目协同系统,使您能够在分布于世界各地的站点间交换工程项目信息,为所有指定的

Eureka Server项目启动报错处理

Eureka Server项目启动报错处理 Eureka是一个服务发现组件,提供服务注册.发现等注册中心功能,使用spring boot启动eureka应用时出现报错: 20:36:17.646 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed java.lang.NoSuchMethodError: org.springframework.boot.builder.

VS2015 调试Web项目 遭遇 HTTP 错误 500.23 - Internal Server Error

此错误是因为项目使用的托管管道模式有问题,将集成改为传统即可 选中项目 进入项目属性 ,如图界面

【slighttpd】基于lighttpd架构的Server项目实战(8)—状态机机制回顾

有限状态机FSM(Finite State Machine) 关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成.状态机通过响应一系列事件而"运行".每个事件都在属于"当前" 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集.函数返回"下一个"(也许是同一个)节点.这些节点中至少有一个必须是终态.当到达终态, 状态机停止. 传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行.很少有事

iBatis + SQL Server 项目开发实战小结

几年前跟随项目经理做的一个ERP小项目,自己业余时间整理的开发手册,供参考. 开发环境配置:编程环境为Microsoft Visual Studio 2010,数据库是SQL Server 2008 R2.设计架构Windows Forms+ .NET Remoting + SQL Server,所有程序的代码量(框架,工具,业务逻辑)在5万行以内.   1 SQL Server 数据库表设计 设计供应商表Vendor, tb是通用前缀标识符号.FM是资金管理Finance Management

Shiro学习(23)多项目集中权限管理

在做一些企业内部项目时或一些互联网后台时:可能会涉及到集中权限管理,统一进行多项目的权限管理:另外也需要统一的会话管理,即实现单点身份认证和授权控制. 学习本章之前,请务必先学习<第十章 会话管理>和<第十六章 综合实例>,本章代码都是基于这两章的代码基础上完成的. 本章示例是同域名的场景下完成的,如果跨域请参考<第十五章 单点登录>和<第十七章 OAuth2集成>了解使用CAS或OAuth2实现跨域的身份验证和授权.另外比如客户端/服务器端的安全校验可参考

【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

对于http服务器,http request的解析是比较麻烦的,由于我们的重点并不在这上面,所以这一部分不打算自己编写,而是使用开源的http-parser库,下面我们将使用该库来构建项目中处理http的类. HTTP Parser简介 http-parser是一个用C编写的HTTP消息解析器,可以解析HTTP请求或者回应消息. 这个解析器常常在高性能的HTTP应用中使用. 在解析的过程中,它不会调用任何系统调用,不会在HEAP上申请内存,不会缓存数据,并且可以在任意时刻打断解析过程,而不会产生