3-4:一个简单的HTTP服务器
文章目录
- HTTP服务器
HTTP服务器
我们使用浏览器请求某一个网页时,浏览器会向相应的服务器发送请求,服务器得到请求后会将报文传送回来,然后浏览器解析,就形成了我们所看见到的网页
这里我们可以写一个简单的HTTP服务器去模拟一下这个过程,让浏览器请求我的服务器然后返回相应的报文。代码如下,基本就是书写tcp/ip的那一套逻辑
#include <iostream>
#include <string>
#include <cstring>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>using namespace std;
class HttpServer
{private:int _port;int _lsock;public:HttpServer(int port):_port(port),_lsock(-1){}void InitServer(){signal(SIGCHLD,SIG_IGN);_lsock=socket(AF_INET,SOCK_STREAM,0);if(_lsock < 0){cerr<<"scoket error"<<endl;exit(2);}struct sockaddr_in local;bzero(&local,sizeof(local));local.sin_family=AF_INET;local.sin_port=htons(_port);local.sin_addr.s_addr=INADDR_ANY;if(bind(_lsock,(struct sockaddr*)&local,sizeof(local)) < 0){cerr<<"socke bind error"<<endl;exit(3);}if(listen(_lsock,5) < 0){cerr<<"listen error"<<endl;exit(4);}}void echoHttp(int sock){char request[2048];size_t s=recv(sock,request,sizeof(request),0);//bug,后序还要做协议处理if(s > 0){request[s]=0;cout << request <<endl;string response="HTTP/1.0 200 OK\r\n";//响应报头首行response += "Content-type: text/html\r\n";//响应正文,文件类型response +="\r\n";response +="<h1>This is a sample HttpServer!!!</h1>";send(sock,response.c_str(),response.size(),0);}close(sock);}void Start(){struct sockaddr_in peer;for(;;){socklen_t len=sizeof(peer);int sock=accept(_lsock,(struct sockaddr*)&peer,&len);if(sock < 0) {cerr<<"accept error"<<endl;continue;}cout<<"get a new connect"<<endl;if(fork()==0){close(_lsock);echoHttp(sock);exit(0);}close(sock);}}~HttpServer(){if(_lsock==-1){close(_lsock);}}};
其中在echoHttp函数中,在拿到一个socket时,我们将接受过来的请求报文保存在一个字符数组中,并输出它。然后使用response这个字符串作为响应报文,返回给服务器,让服务器解析它,返回的文件类型是html。
如下大家可以看到,浏览器接受到了这个简单的HTTP服务器发送过来的回应,并成功解析。
3-4:一个简单的HTTP服务器相关推荐
- Linux网络管理之四:创建一个简单的vsftpd服务器
VSFTPD主要配置文件如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 在Linux上搭建 一个简单的vsftpd服务器
主要配置文件如下: /etc/vsftpd/vsftpd.conf 主配置文件 /etc/vsftpd.ftpusers 阻止用户访问FTP服务器的用户名称清单 /etc/vsftpd.userlis ...
- 我的Go语言学习之旅八:创建一个简单的WEB服务器
因为一直在做WEB程序,所以更关注WEB界的发展,这里就用GO做了一个简单的WEB服务器,直接看例子吧 package main import ( "fmt" "net/ ...
- [C# 网络编程系列]专题十二:实现一个简单的FTP服务器
引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...
- ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- http服务器响应格式,熟悉Http协议的请求和响应格式,编写一个简单的Http服务器。
基本要求:1 正确解...
熟悉Http协议的请求和响应格式,编写一个简单的Http服务器. 基本要求: 1 正确解 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 熟悉Http协议的请求和响应格 ...
- 用python写一个简单的web服务器
人生苦短,我用python 简洁高效,这才是理想的语言啊 分享一点python的学习经验-----如何用python写一个简单的web服务器 首先,我们需要简单地了解一下网络通信协议,这里用白话介绍一 ...
- web服务器python_一个简单的web服务器(python)
今天用python写一个简单的web服务器代码网上都有只是为了方便大家学习做了一个简单的教程 第一首先我们来一张架构以及运行过程的流程图 本文学习仅供参考,需要更多资料可以加群:496257369 简 ...
最新文章
- AMD宣布350亿美元收购赛灵思,CPU、GPU、FPGA全凑齐,中国握有否决权
- 2010 求后序遍历
- 五天带你学完《计算机网络》·第一天·物理层
- mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)...
- Spring Cloud OpenFeign使用教程
- 借个iPad玩玩,越狱4.2.1成功
- 写个自己:学C++有感
- CAS:compare and swap
- CorelDRAWX4的VBA插件开发(十二)新建出血参考线
- 笔记--希尔伯特空间
- 程序员考证之信息系统项目管理师
- 软件内部的定时炸弹:0-Day Log4Shell只是冰山一角
- SEO数据变化,检测网站死链接、蜘蛛访问、whois
- cesium 漫游飞行_Cesium 之三维漫游飞行效果实现篇
- 山重水复疑无路,分库分表来敲门
- 判断数字的正则表达式
- 微信分享的各种大小限制
- Lienol 大神3月11日源码编译的的openwrt
- SpringCloud无法获取Nacos中的配置文件信息
- 使用minio与腾讯cos文件上传下载
热门文章
- 融资2.5亿的国产浏览器,被曝只是打包chrome
- 第一节:什么是ES6?新手该如何理解
- mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
- 机器学习第20篇 - 基于Boruta选择的特征变量构建随机森林
- 推荐几个常用的生物通路数据库
- python 数据库驱动开发实例_Python驱动概述
- 1.9 _07 不与最大数相同的数字之和 python
- 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
- 2021年石家庄七中高考成绩查询入口,石家庄市教育考试院官网2020中考查分:成绩查询入口...
- java绘制半透明图片_如何使绘制的图像在Java中透明