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) 协议头解析的更多相关文章
-
[php]HTTP协议头解析
(Request-Line) GET /static/imgs/bqpd.jpg HTTP/1.1 Accept image/png, image/svg+xml, image/*;q=0.8, */ ...
-
c++ 常见网络协议头
//NTP协议 typedef struct _NTP_HEADER { uint8_t _flags;//Flags 0xdb uint8_t _pcs;//Peer Clock Stratum u ...
-
GJM : Unity3D 常用网络框架与实战解析 【笔记】
Unity常用网络框架与实战解析 1.Http协议 Http协议 存在TCP 之上 有时候 TLS\SSL 之上 默认端口80 https 默认端口 ...
-
HTTP协议详细解析
HTTP协议详解 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基 ...
-
HTTP报文头解析
HTTP报文头解析 本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该 ...
-
基于byte[]的HTTP协议头分析代码
smark 专注于高并发网络和大型网站架规划设计,提供.NET平台下高吞吐的网络通讯应用技术咨询和支持 基于byte[]的HTTP协议头分析代码 最近需要为组件实现一个HTTP的扩展包,所以简单地实现 ...
-
C# 串口操作系列(4) -- 协议篇,文本协议数据解析
C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报 分类: 通讯 ...
-
Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据
版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...
-
xinetd网络
简单Web服务器 基本的HTTP协议 请求服务器数据 GET /文件或目录 HTTP/1.1 协议头部分(可选) /r/n(协议头结束) 服务器应答浏览器 HTTP/1.1 200 OK conten ...
随机推荐
-
IIS网站服务器性能优化指南(转载)
原文网址:http://www.phontol.com/20090507_419416_1.html Windows Server自带的互联网信息服务器(Internet Informat ...
-
负载均衡server load balancer
负载均衡(Server Load Balancer,简称SLB)是对多台云服务器进行流量分发的负载均衡服务.SLB可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. ( ...
-
【LeetCode】【Python解决问题的方法】Best Time to Buy and Sell Stock II
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
-
noip2015Day2T1-跳石头
题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有N ...
-
Oracle中表字段相关操作举例
--创建测试表 create or replace table student ( xh ), --学号 xm ), --姓名 sex ), --性别 birthday date, --日期 sal ...
-
阿里云新老用户购买 2核8G云服务器5M带宽
这次阿里云活动的力度还是很大的,2核8G云服务器5M带宽 3年才2070 ,还是很值的购买的. 也放一个我的团战队连接,欢迎大家一起拼低价 https://m.aliyun.com/act/team1 ...
-
hdu 1057 A + B Again
A + B Again Problem Description There must be many A + B problems in our HDOJ , now a new one is com ...
-
solusvm安装过程
openvz solusvm ** Testing connectivity PING solusvm.com (69.168.233.94) 56(84) bytes of data. 64 byt ...
-
RTTI(一) 枚举
SetEnumProp void __fastcall TForm2::Button1Click(TObject *Sender) { //Getting the current color of t ...
-
【刷题】HDU 4405 Aeroplane chess
Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled fr ...