B/S模式的web通信

news/2024/5/20 21:04:25

这里写目录标题

  • 目标
    • 实现的目标
  • 服务器代码(采用epoll实现服务器)
    • 整体框架
    • main函数
    • init_listen_fd函数(负责对lfd初始化的那一系列操作)
    • epoll_run函数
  • 一级目录
    • 二级目录
    • 二级目录
    • 二级目录

目标

实现的目标

在这里插入图片描述
我们要实现,在服务器上启动服务之后,通过浏览器访问Ip+port,可以访问到服务器某个目录的文件
当然也可以使用域名访问,域名就是对IP+port进行了包装,域名需要申请

服务器代码(采用epoll实现服务器)

整体框架

在这里插入图片描述
在这里插入图片描述

main函数

在这里插入图片描述
首先,为了更加灵活的进行服务端的启动,我们在main函数中,定义两个参数,用于进行启动参数的配置和读取

首先,判断argv是否读到了三个字符串,如果小于三个字符串,则启动时没有按照规定进行启动参数设置,提示启输入./server 端口 以及要发布的文件所在路径

之后,通过argv[2],拿到输入的第二个字符串,即端口,将其atoi,转为字面值一样的int型,就拿到了开放的端口

之后,因为http协议中,对于从浏览器发送而来的文件的位置,是以启动配置的第三个参数为参考根目录的相对路径,服务器要设法拿到服务器对应的路径,而拼接路径又过于繁琐,所以,使用chdir函数,该函数可以让服务端的工作目录跳转到某个目录下(实际上就是与cd的作用一样),所以,chdir(argv[2]),就是将服务器跳转到第三个参数所指明的目录内,这样,从http协议封装出来的数据包拿到的数据,可以直接拿到当前服务器使用,因为服务器的工作目录已经跳转到第三个参数的目录了

之后使用封装的函数,根据传来的端口,启动epoll监听

init_listen_fd函数(负责对lfd初始化的那一系列操作)

在这里插入图片描述
在这里插入图片描述

即,根据传入进来的port(端口)、epfd(epoll树根)等参数,进行lfd的创建以及上树

包括,创建socket、创建服务器地址结构、设置端口复用、给lfd绑定地址、设置监听上限、将lfd上树,预监听其读事件。
最后返回lfd

epoll_run函数

在这里插入图片描述
根据传入的port,首先,创建一个epoll_event数组,用于后续的epoll_wait监听时返回套接字数组。创建epoll监听树树根,之后传入init_listen_fd函数,创建监听套接字lfd,并将其上树

在这里插入图片描述
在lfd上树之后,我们就可以开始监听了
while循环内,使用epoll_wait开始监听,将监听结果返回到all_events数组。

之后拿到返回值,就是all_events数组的有效元素个数,也是其循环上限,
在循环内,我们默认只处理服务器的读事件(也就是只处理接收请求),其他事件不处理
将其元素挨个取出,转为指针,如果不是事件,直接continue,如果是,进行后续代码:
读事件又分为是lfd收到数据还是其他cfd受到数据:
如果是lfd,进行accept进行新的cfd创建与连接
如果是cfd,那么进行数据的读取

do_accept、do_read函数也是封装的函数

一级目录

二级目录

二级目录

二级目录


http://www.mrgr.cn/p/03338758

相关文章

数字集成电路 NMOS工作区

MOSFET是一个四端器件(栅极、源极、漏极、衬底)。 衬底一般连接到一个直流电源端:NMOS的衬底接地GND,PMOS的衬底接高电平VDD。(为了使得MOS管中的PN结零偏或反偏,尽管如此,二极管的结电容也会对电路产生影响)(PN结正偏不仅会形成通路,也会导致结电容急剧增大 C=ES/D) N…

Python-----容器的介绍以及操作

1.列表和元组 1.列表是什么, 元组是什么: 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. 但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表 列表…

力扣138. 随机链表的复制

Problem: 138. 随机链表的复制 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.创建Map集合Map<Node, Node> map;创建指针cur指向head&#xff1b; 2.遍历链表将cur作为键&#xff0c;new Node(cur.val)作为值&#xff0c;存入map集合&#xff1b; 3.再次…

FPGA+炬力ARM实现VR视频播放器方案

FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文件播放 4.支持定制化配置…

一招MAX降低10倍,现在它是我的了

一.背景 性能优化是一场永无止境的旅程。 到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点。 C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询Redis。本地缓存命中率99%,服务性能比较平稳。随着门店数据越来越多…

【京东云新品发布月刊】2024年4月产品动态

京东云4月产品动态:1.【言犀AI虚拟主播】"采销东哥"数字人是怎样练成的?“大家好,好久不见,我是你们的老朋友东哥……”面对众网友喊话开直播,刘强东以新的形式与大家见面。4月16日下午6点18分,由京东云言犀打造的“采销东哥”AI数字人开启直播首秀,同时亮相京…

【C++】CentOS环境搭建-编译安装Boost库(附CMAKE编译文件)

【C】环境搭建-编译安装Boost库 Boost库简介Boost库安装通过YUM安装&#xff08;版本较低 V1.53.0&#xff09;通过编译安装&#xff08;官网最新版本1.85.0&#xff09;1.安装相关依赖2.查询官网下载最新安装包并解压3.编译Boost4.安装Boost库到系统路径 Boost库验证 Boost库简…

谷歌Gmail邮箱开启SMTP/IMAP服务流程

本篇专门定向讲解谷歌Gmail邮箱,如何开通SMTP协议的流程,在讲篇幅前,我需要你确定3件事:1.你已经有谷歌账号了2.你很清楚自己为什么想要开通SMTP服务3.你已经掌握一定的基础知识,能够达到翻出了谷歌Gmail邮箱开启SMTP/IMAP服务流程如果你没法“翻出去”,接下来的内容就可…

python教程9-第三方模块安装

https://pypi.python.org/pypi 是python的开源模块库。 收录了⾃全世界python开发者贡献的模块,⼏乎涵盖了你想⽤python做的任何事情。 事实上每个python开发 者,只要注册⼀个账号就可以往这个平台上传你⾃⼰的模块,这样全世界的开发者都可以容易的下载并使⽤你的模块。 下载…

从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况

Anaconda是什么? Anaconda 是一个开源的 Python 发行版本,主要面向数据科学、机器学习和数据分析等领域。它不仅包含了 Python 解释器本身,更重要的是集成了大量的用于科学计算、数据分析和机器学习相关的第三方库,并且提供了一个强大的包管理和环境管理工具——Conda。 通…

Allegro PCB designer放置振列过空,Via Array,

首先 Place >>Via Array, 然后配置options 选项卡。 最后鼠标左击一下&#xff0c;拉个区域框&#xff0c;再点击一下。如下图 尤其注意鼠标左击一下再左击一下。

小程序直接生成鸿蒙App的方法

今天来聊聊纯血鸿蒙,这个一直处于风口浪尖的技术话题。操作系统作为软件生态系统的基石,始终是全球科技领域竞争的制高点。今天来聊聊纯血鸿蒙,这个一直处于风口浪尖的技术话题。 操作系统作为软件生态系统的基石,始终是全球科技领域竞争的制高点。 鸿蒙操作系统(HarmonyO…

sqlserver01

我们从下载开始 我们这里下载的是2019,但是醉胡我是通过百度网盘下载的,我们来看一下下载后的文件

前端技术选型时有用的网站

npm-compare.com比如我们想比较 react-query和 swr,可以访问 https://npm-compare.com/react-query,swr 查看结果,页面提供了下载量,star 数量,lisense 等的对比,方便我们做出决策。bundlephobia.com比较完了这些,我们可能还想知道哪个包的体积更小,更轻量,这时可以使用…

winform图书销售管理系统+mysql

winform图书销售管理系统mysql数据库说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 功能模块&#xff1a; 管理员:ttt 123 登陆可以操作我的 个人信息 修改密码 用户信息 添加删除用户 图书 添加删除图书信息 购物车 购买订单信息 充值 退出账户 …

云之家公共号列表操作中没有“进入”“作废” 功能

解决方案:在权限中心【设置业务管理员】操作【添加公共号管理员】

(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目

(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目PbootCMS内核开发的网站模板&#xff0c;该模板适用于物流运输网站、仓储货运网站等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;自适应手机端&#xff0c;同一个后台…

华为OD机试 - 手机App防沉迷系统(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

Java中的线程池

CPU有限&#xff0c;一个CPU只能执行一个线程&#xff0c;在有限的资源下&#xff0c;大量的线程都在等待。通过线程池去管理、创建线程。 一、线程池的核心参数&#xff08;七个&#xff09; 救急线程 非核心线程 临时线程 流程&#xff1a;当任务提交过来之后&#xff0c…

2024年3月份宠物行业线上市场数据分析:市场呈现出精细化、品质化趋势

近些年来&#xff0c;养宠物的家庭越来越多&#xff0c;宠物经济也逐渐衍生开来。宠物经济主要是围绕宠物产生的一整条产业链&#xff0c;包括宠物食品、宠物家居、宠物美容和最近火起来的宠物保险等多个领域。目前随着居民人均收入的提高&#xff0c;宠物市场也得到稳步发展。…