1:在/etc/xinetd.d下添加配置文件xhttpd

 service xhttpd
{
socket_type = stream //每行“=”前后各最多只能有一个空格
protocol= tcp
wait = no
user =nobody
server =/home/username/xhttpd/xhttpd //在xhttpd目录下有个xhttpd可执行文件
server_args = /home/username/dir  //资源访问的目录
disable = no
flags = IPv4
}

2:添加监听端口

  vim /etc/service

  添加两行:

  xhttpd  10086/tcp

  xhttpd  10086/udp

3:重启xinetd服务

  sudo service xinetd restart

4:在浏览器中输入访问地址:127.0.0.1:10086/hello.txt

  •   然后xinetd会启动xhttpd程序,并且传入两个默认参数:

    • argv[0] = xhttpd
    • argv[1] = /home/username/dir
  • 分析http头信息
    • GET /hello.txt HTTP/1.1

5:xhttpd.c源码分析

 #include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h> #define N 4096 void send_headers(char* type)
{
printf("HTTP/1.1 200 OK\r\n");
printf("Content-Type:%s; charset=utf-8\r\n",type);
printf("Connection:close\r\n");
printf("\r\n");
} void send_err()
{
//http protcol
//printf("HTTP/1.1 200 OK\r\n");
send_headers("text/html");
printf("<html>\r\n");
printf("<head><title>404 Can Not Find Page!</title></head>\r\n");
printf("<body>\r\n");
printf("Cann't Find Page!!!!\r\n");
printf("</body>\r\n");
printf("</html>\r\n");
exit();
} int main(int argc, char *argv[])
{
char line[N];
char method[N],path[N],protocol[N]; char *file;
struct stat sbuf;
FILE *fp;
int ich; // send_err();
// return 0; if(argc != )
{
send_err();
} if(chdir(argv[]) == -)
{
send_err();
} if(fgets(line,N,stdin) == NULL)
{
send_err();
} char headerInfo[];
strcpy(headerInfo,line); if(sscanf(line,"%[^ ] %[^ ] %[^ ]",method,path,protocol) != )
{
send_err(); //GET /hello.c HTTP/1.1
} while(fgets(line, N, stdin) != NULL)
if(strcmp(line,"\r\n"))
break; if(strcmp(method,"GET") != )
send_err(); if(path[] != '/')
send_err(); file = path+; if(stat(file,&sbuf) < )
send_err(); fp = fopen(file, "r");
if(fp == NULL)
send_err(); send_headers("text/plain");
//send_headers("audio/mpeg"); printf("method:%s\n",method);
printf("path:%s\n",path);
printf("protocol:%s\n",protocol);
printf("argv[0]:%s\n",argv[]);
printf("argv[1]:%s\n",argv[]);
printf("headerInfo:%s\n",headerInfo); while((ich = getc(fp)) != EOF)
putchar(ich); fflush(stdout);
fclose(fp);
return ;
}

  

xinetd网络(2) 协议头解析的更多相关文章

  1. [php]HTTP协议头解析

    (Request-Line) GET /static/imgs/bqpd.jpg HTTP/1.1 Accept image/png, image/svg+xml, image/*;q=0.8, */ ...

  2. c++ 常见网络协议头

    //NTP协议 typedef struct _NTP_HEADER { uint8_t _flags;//Flags 0xdb uint8_t _pcs;//Peer Clock Stratum u ...

  3. GJM : Unity3D 常用网络框架与实战解析 【笔记】

    Unity常用网络框架与实战解析 1.Http协议          Http协议                  存在TCP 之上 有时候 TLS\SSL 之上 默认端口80 https 默认端口 ...

  4. HTTP协议详细解析

    HTTP协议详解 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基 ...

  5. HTTP报文头解析

    HTTP报文头解析 本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该 ...

  6. 基于byte[]的HTTP协议头分析代码

    smark 专注于高并发网络和大型网站架规划设计,提供.NET平台下高吞吐的网络通讯应用技术咨询和支持 基于byte[]的HTTP协议头分析代码 最近需要为组件实现一个HTTP的扩展包,所以简单地实现 ...

  7. C# 串口操作系列(4) -- 协议篇,文本协议数据解析

    C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报  分类: 通讯 ...

  8. Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据

    版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...

  9. xinetd网络

    简单Web服务器 基本的HTTP协议 请求服务器数据 GET /文件或目录 HTTP/1.1 协议头部分(可选) /r/n(协议头结束) 服务器应答浏览器 HTTP/1.1 200 OK conten ...

随机推荐

  1. DevExpress开发win8风格界面

    由于近期在对项目软件界面进行优化,找到了一款效果挺炫的插件,DevExpress15.2,可以制作win8可以滑动图标那个界面的效果,不多说,先贴图: (你没看错,这是用C#winform实现的) 可 ...

  2. Vue学习入门

    1.安装WebStorm: 2.激活WebStorm:https://blog.csdn.net/qq_40147863/article/details/81317709 3.安装全局脚手架:npm ...

  3. 新版vue-cli输入本地ip不能访问,只能用localhost才可以访问?

    问:新版vue-cli输入本地ip不能访问,只能用localhost才可以访问? 答:修改config/index.js配置,将host: 'localhost',改为host: '0.0.0.0', ...

  4. JDK1.8中如何用ScriptEngine动态执行JS

    JDK1.8中如何用ScriptEngine动态执行JS jdk1.6开始就提供了动态脚本语言诸如JavaScript动态的支持.这无疑是一个很好的功能,毕竟Java的语法不是适合成为动态语言.而JD ...

  5. xe5 android tts(Text To Speech) [转]

    TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转语音的方法 和访问蓝牙一样,这里用javaclass的接口实现 接 ...

  6. Azure PowerShell (13) 批量设置Azure ARM Network Security Group (NSG)

    <Windows Azure Platform 系列文章目录> 刚刚在帮助一个合作伙伴研究需求,他们的虚拟机全面的网络安全组(Network Security Group, NSG)会经常 ...

  7. Django--bug--__init__() got an unexpected keyword argument 'qnique'

    建立模型之后,执行迁移,报如下错误: __init__() got an unexpected keyword argument 'qnique' 错误原因:模型的属性的约束添加错误,这种错误一般就是 ...

  8. Django--django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE

    Django序列化时遇到错误: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESP ...

  9. Linux From Scratch [3]

    1. 为了编译glibc,我们需要kernel header. make mrproper # clean kernel tree make INSTALL_HDR_PATH=dest headers ...

  10. C++11--随机数引擎和随机数分布<random>

    /* 随机数引擎: * 有状态的随机数发生器,生成在预定义的最大小值之间的随机数 * 不是真正的随机数--伪随机 */ int main () { std::default_random_engine ...