文章目录

  • 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服务器相关推荐

  1. Linux网络管理之四:创建一个简单的vsftpd服务器

    VSFTPD主要配置文件如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  2. 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 ...

  3. 在Linux上搭建 一个简单的vsftpd服务器

    主要配置文件如下: /etc/vsftpd/vsftpd.conf 主配置文件 /etc/vsftpd.ftpusers 阻止用户访问FTP服务器的用户名称清单 /etc/vsftpd.userlis ...

  4. 我的Go语言学习之旅八:创建一个简单的WEB服务器

    因为一直在做WEB程序,所以更关注WEB界的发展,这里就用GO做了一个简单的WEB服务器,直接看例子吧 package main import ( "fmt" "net/ ...

  5. [C# 网络编程系列]专题十二:实现一个简单的FTP服务器

    引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...

  6. 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 ...

  7. http服务器响应格式,熟悉Http协议的请求和响应格式,编写一个简单的Http服务器。 基本要求:1 正确解...

    熟悉Http协议的请求和响应格式,编写一个简单的Http服务器. 基本要求: 1 正确解 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 熟悉Http协议的请求和响应格 ...

  8. 用python写一个简单的web服务器

    人生苦短,我用python 简洁高效,这才是理想的语言啊 分享一点python的学习经验-----如何用python写一个简单的web服务器 首先,我们需要简单地了解一下网络通信协议,这里用白话介绍一 ...

  9. web服务器python_一个简单的web服务器(python)

    今天用python写一个简单的web服务器代码网上都有只是为了方便大家学习做了一个简单的教程 第一首先我们来一张架构以及运行过程的流程图 本文学习仅供参考,需要更多资料可以加群:496257369 简 ...

最新文章

  1. AMD宣布350亿美元收购赛灵思,CPU、GPU、FPGA全凑齐,中国握有否决权
  2. 2010 求后序遍历
  3. 五天带你学完《计算机网络》·第一天·物理层
  4. mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)...
  5. Spring Cloud OpenFeign使用教程
  6. 借个iPad玩玩,越狱4.2.1成功
  7. 写个自己:学C++有感
  8. CAS:compare and swap
  9. CorelDRAWX4的VBA插件开发(十二)新建出血参考线
  10. 笔记--希尔伯特空间
  11. 程序员考证之信息系统项目管理师
  12. 软件内部的定时炸弹:0-Day Log4Shell只是冰山一角
  13. SEO数据变化,检测网站死链接、蜘蛛访问、whois
  14. cesium 漫游飞行_Cesium 之三维漫游飞行效果实现篇
  15. 山重水复疑无路,分库分表来敲门
  16. 判断数字的正则表达式
  17. 微信分享的各种大小限制
  18. Lienol 大神3月11日源码编译的的openwrt
  19. SpringCloud无法获取Nacos中的配置文件信息
  20. 使用minio与腾讯cos文件上传下载

热门文章

  1. 融资2.5亿的国产浏览器,被曝只是打包chrome
  2. 第一节:什么是ES6?新手该如何理解
  3. mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
  4. 机器学习第20篇 - 基于Boruta选择的特征变量构建随机森林
  5. 推荐几个常用的生物通路数据库
  6. python 数据库驱动开发实例_Python驱动概述
  7. 1.9 _07 不与最大数相同的数字之和 python
  8. 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
  9. 2021年石家庄七中高考成绩查询入口,石家庄市教育考试院官网2020中考查分:成绩查询入口...
  10. java绘制半透明图片_如何使绘制的图像在Java中透明