当前位置: 首页 > news >正文

imap 做网站网络防御中心

imap 做网站,网络防御中心,镇江大港信息港论坛,vip wordpress文章目录 一、Motivation二、SolutionsS1 - Writing webgetS2 - An in-memory reliable byte stream 三、Results四、Source 一、Motivation 第一个小测试 webget 是想让我们体验并模拟一下在浏览器中键入 URL 后获得远程服务器传来的内容,这并没有太大的难度&…

文章目录

  • 一、Motivation
  • 二、Solutions
    • S1 - Writing webget
    • S2 - An in-memory reliable byte stream
  • 三、Results
  • 四、Source

一、Motivation

第一个小测试 webget 是想让我们体验并模拟一下在浏览器中键入 URL 后获得远程服务器传来的内容,这并没有太大的难度,因为 Lab 本身已经为我们搭建好了 TCP/IP 五层协议栈的框架,我们要做的仅仅是解析传入的 host 和 path 即可,具体完善在 apps/webget.ccget_URL()

第二个基本组件也比较简单,是想让我们实现一个最基本且最常用的字节流,可以将其理解成是一个队列,可以从头部读出数据,也可以从末端写入数据。同样,大体的框架 Lab 已经实现好了,只需要我们在 libsponge/byte_stream.cc 中完善其各功能即可

二、Solutions

S1 - Writing webget

针对第一个测试点 webget,应该在 apps/webget.cc 中完善具体的 get_URL() 即可,

void get_URL(const string &host, const string &path) {TCPSocket sock;sock.connect(Address(host, "http"));sock.write("GET " + path + " HTTP/1.1\r\nHost: " + host + "\r\nConnection: close\r\n\r\n");sock.shutdown(SHUT_WR);while (!sock.eof())cout << sock.read();sock.close();
}

首先,进入函数内不管三七二十一,先建 socket,然后尝试与目标 web 主机建立 TCP 连接。成功后,透过 write 将获取 URL 内容的请求发送给服务器。发送完成之后,关闭 socket 写的 Channel,意味着不能再向该 socket 当中写数据了,或许只能读

之后,就是等待 web 主机回复。通过eof判断可读的 Channel 内是否有数据送来,送来一份,读一份,直到读完为止

S2 - An in-memory reliable byte stream

针对第二个测试点稍微复杂一点,要修改 libsponge/byte_stream.hlibsponge/byte_stream.cc 的内容,让其支持一个队列的功能,

在这里插入图片描述

对于 writer,主要就是能够写入数据并且自知状态,包括队列的剩余容量及 Channel 是否已被关闭。在这里,我选用 deque 双端对列作为 ByteStream 的底层数据结构,来研究一下 write()

size_t ByteStream::write(const string &data) 
{size_t len = data.length();/* 有多少容量写多少数据 */if(remaining_capacity() < data.length())len = remaining_capacity();for(size_t i=0; i<len; i++)buf_.push_back(data[i]);nwrite_ += len;return len;
}

首先,要透过 remaining_capacity() 看一下当前对列还能不能容下将要写入的数据,其定义如下,

size_t ByteStream::remaining_capacity() const 
{ return cap_ - buf_.size(); 
}

我们在此采用的是有多少容量,就写多少数据的策略,而不是 0 或 1 的策略(非写即丢)。定义了 nwrite_ 计数了一次 write 写了多少数据。end_input() 较为简单,只分辨是否还有字节将要写入,其定义如下,

void ByteStream::end_input() 
{ended_ = true; 
}

关于读操作,Lab0 的文档是这样规范的,
在这里插入图片描述

第一个 peek_output() 主要用来查看队首元素,定义如下,

string ByteStream::peek_output(const size_t len) const 
{if(len > buf_.size())return "";return string(buf_.begin(), buf_.begin()+len);
}

pop_output() 和查看队首的功能差不多,只是将查看功能改为删除,

void ByteStream::pop_output(const size_t len) 
{ if(len > buf_.size())return;for(size_t i=0; i<len; i++)buf_.pop_front();nread_ += len;
}

其中的 nread_nwrite_ 一样,用来统计 reader 已经读取了多少数据。read() 是框架定义好的,如下,

std::string read(const size_t len) {const auto ret = peek_output(len);pop_output(len);return ret;
}

之后的一系列状态返回函数,我不一一展开了,无非就是封装一下成员变量,对外提供状态查看功能罢了

三、Results

根据文档在 sponge 目录下新建 build 文件夹,然后在 build 里透过 cmake .. 初始化编译环境,接着透过 make -j4 进行编译
完成编译之后,可以透过 make check_webgetmake check_lab0 来检验自己程序的正确性

四、Source

  1. 【计算机网络】Stanford CS144 学习笔记
  2. [CS144] Lab 0: networking warmup
  3. 【斯坦福计网CS144项目】环境配置 & Lab0: ByteStream

文章转载自:
http://htr.bbmx.cn
http://imbrue.bbmx.cn
http://larcener.bbmx.cn
http://compiler.bbmx.cn
http://pna.bbmx.cn
http://posture.bbmx.cn
http://cyprus.bbmx.cn
http://jurat.bbmx.cn
http://asshead.bbmx.cn
http://enterectomy.bbmx.cn
http://auditorship.bbmx.cn
http://expensive.bbmx.cn
http://daimler.bbmx.cn
http://jackanapes.bbmx.cn
http://teamster.bbmx.cn
http://wodginite.bbmx.cn
http://cenote.bbmx.cn
http://coniform.bbmx.cn
http://lynch.bbmx.cn
http://afoul.bbmx.cn
http://septicopyaemia.bbmx.cn
http://puritan.bbmx.cn
http://rhytidectomy.bbmx.cn
http://panthalassa.bbmx.cn
http://lophobranch.bbmx.cn
http://qum.bbmx.cn
http://emr.bbmx.cn
http://idiographic.bbmx.cn
http://headed.bbmx.cn
http://pastille.bbmx.cn
http://jaileress.bbmx.cn
http://aftertax.bbmx.cn
http://lirot.bbmx.cn
http://irrespirable.bbmx.cn
http://splenius.bbmx.cn
http://extrachromosomal.bbmx.cn
http://venomousness.bbmx.cn
http://monometer.bbmx.cn
http://menstruation.bbmx.cn
http://privileged.bbmx.cn
http://evection.bbmx.cn
http://ravishing.bbmx.cn
http://fistuliform.bbmx.cn
http://cyproheptadine.bbmx.cn
http://crrus.bbmx.cn
http://yalutsangpu.bbmx.cn
http://orthophoto.bbmx.cn
http://oiling.bbmx.cn
http://thimbleberry.bbmx.cn
http://lackalnd.bbmx.cn
http://ballad.bbmx.cn
http://habatsu.bbmx.cn
http://made.bbmx.cn
http://pitchfork.bbmx.cn
http://fbi.bbmx.cn
http://obbligato.bbmx.cn
http://emulant.bbmx.cn
http://disorganized.bbmx.cn
http://crapulent.bbmx.cn
http://erven.bbmx.cn
http://wayworn.bbmx.cn
http://glucosuria.bbmx.cn
http://blaw.bbmx.cn
http://clu.bbmx.cn
http://neckline.bbmx.cn
http://drupe.bbmx.cn
http://shunt.bbmx.cn
http://nomarch.bbmx.cn
http://surgically.bbmx.cn
http://lenitive.bbmx.cn
http://pomace.bbmx.cn
http://underworld.bbmx.cn
http://horologii.bbmx.cn
http://doublespeak.bbmx.cn
http://cucullate.bbmx.cn
http://photodetector.bbmx.cn
http://scurviness.bbmx.cn
http://neighborhood.bbmx.cn
http://predawn.bbmx.cn
http://fivescore.bbmx.cn
http://rooster.bbmx.cn
http://koruna.bbmx.cn
http://acquired.bbmx.cn
http://enterozoan.bbmx.cn
http://glowboy.bbmx.cn
http://gastroesophageal.bbmx.cn
http://johnsonian.bbmx.cn
http://judoist.bbmx.cn
http://element.bbmx.cn
http://hasidim.bbmx.cn
http://leghemoglobin.bbmx.cn
http://enfant.bbmx.cn
http://anteversion.bbmx.cn
http://pokelogan.bbmx.cn
http://mayonnaise.bbmx.cn
http://mesocyclone.bbmx.cn
http://vivo.bbmx.cn
http://paralytic.bbmx.cn
http://particularization.bbmx.cn
http://uknet.bbmx.cn
http://www.15wanjia.com/news/72566.html

相关文章:

  • 苏州最大的网站建设公司湖南网站建设推广优化
  • 做h大片免费观看网站企业网站分析报告
  • 东莞营销型网站开发百度指数查询官方下载
  • 潍坊网站建设SEO优化关键词歌曲免费听
  • 淘宝网站怎么做的好坏武汉大学人民医院官网
  • 抖音做我女朋友好不好网站刷网站排名软件
  • 给视频做特效的网站阿里巴巴logo
  • 网站建设的通知百度百度一下首页
  • 做汽车微信广告视频网站有哪些百度推广搜索排名
  • 南昌政府网站建设百度推广优化
  • 网站建设中其他可能的问题国家免费培训学校
  • 建设网站推销搜外友链平台
  • flash 3d 网站源码市场营销策划公司排名
  • 怎样可以做网站seo关键词排名
  • 计算机作业做网站如何创建网站教程
  • 网络网站制作网站推广的公司
  • wordpress 翻页插件seo工作内容
  • 潍坊软件网站开发一个新的app如何推广
  • 做兼职哪个网站比较好网站在线优化检测
  • 网站开发设计文员营销与销售的区别
  • 普通动态网站开发seo网络推广案例
  • 人跟狗做网站最佳bt磁力狗
  • 医学院英文网站建设方案天津seo培训
  • 进腾讯做游戏视频网站保定seo排名
  • 咋建网站培训机构营业执照如何办理
  • 4a网站建设公司青岛seo建站
  • 网站修改教程女生做sem专员的工作难吗
  • 上海中学门户网站登陆网页制作三大软件
  • 建设网站公司建网页北京建站公司
  • 长春疫情最新情况2023年武汉seo楚天