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

设计网站用什么语言怎样做金融网站

设计网站用什么语言,怎样做金融网站,如何提高网站的安全性,做小说网站做国外域名还是国内的好文章目录 1 实验概述与背景2 ByteStream的设计与实现2.1 字节流抽象概述2.2 实现思路2.3 核心数据结构2.4 Writer实现细节2.5 Reader实现细节 3 WebGet应用实现 1 实验概述与背景 Stanford大学的CS144课程是计算机网络领域最著名的课程之一,其实验设计巧妙地引导学…

文章目录

    • 1 实验概述与背景
    • 2 ByteStream的设计与实现
      • 2.1 字节流抽象概述
      • 2.2 实现思路
      • 2.3 核心数据结构
      • 2.4 Writer实现细节
      • 2.5 Reader实现细节
    • 3 WebGet应用实现

1 实验概述与背景

Stanford大学的CS144课程是计算机网络领域最著名的课程之一,其实验设计巧妙地引导学生从零开始实现一个TCP/IP协议栈。在这一系列实验中,Lab0是万里长征的第一步,通过实现以下两个核心组件,为后续的TCP协议实现奠定基础:

  1. 字节流(ByteStream)抽象:模拟可靠传输信道的基础抽象
  2. WebGet应用:使用系统提供的TCP实现来获取网页内容

本文将详细记录Lab0的实现过程。Github仓库地址

2 ByteStream的设计与实现

2.1 字节流抽象概述

ByteStream是什么?简单来说,它是一个FIFO(先进先出)的字节缓冲区,具有以下特性:

  • 有限容量:缓冲区容量固定,不能无限增长
  • 双向接口:Writer端写入,Reader端读取
  • 流结束控制:Writer可以关闭流,Reader可以检测流是否结束
  • 错误处理:可以设置和检测错误状态

ByteStream抽象在网络中的角色是模拟可靠的单向数据流,类似于TCP连接的一个方向。

2.2 实现思路

ByteStream总共有一下三个:

  1. ByteStream基类:包含共享的成员变量和方法
  2. Writer子类:负责写入操作的接口
  3. Reader子类:负责读取操作的接口

这种设计将读写权限分离,与实际的网络通信场景吻合:数据发送方只能写入,接收方只能读取。

在这里插入图片描述

2.3 核心数据结构

ByteStream的核心数据结构非常简单,主要包含以下几个成员变量:

uint64_t capacity_;     // 字节流的总容量
std::string buffer_;    // 内部缓冲区
bool closed_;           // 流是否已关闭
uint64_t bytes_pushed_; // 累计推入的字节数
uint64_t bytes_popped_; // 累计弹出的字节数
bool error_;            // 错误状态标志

这些变量共同维护了字节流的状态,使得Reader和Writer能够协同工作。

2.4 Writer实现细节

Writer负责向字节流中写入数据,主要实现以下几个方法。实现中需要注意的关键点:

  • push操作中检查流是否已关闭
  • 确保不超过可用容量
  • 正确计算available_capacity(已推入但未弹出的字节占用了容量)
void Writer::push(string data)
{// 如果流已关闭,直接返回if (is_closed()) {return;}// 计算可接受的字节数size_t can_accept = min(available_capacity(), data.size());// 只接受在容量范围内的数据if (can_accept > 0) {buffer_.append(data.substr(0, can_accept));bytes_pushed_ += can_accept;}
}void Writer::close()
{closed_ = true;
}bool Writer::is_closed() const
{return closed_;
}uint64_t Writer::available_capacity() const
{return capacity_ - (bytes_pushed_ - bytes_popped_);
}uint64_t Writer::bytes_pushed() const
{return bytes_pushed_;
}

2.5 Reader实现细节

Reader负责从字节流中读取数据,主要实现以下几个方法。实现中需要注意的关键点:

  • peek返回对缓冲区的视图,不修改数据
  • pop需要检查长度参数,避免越界
  • is_finished需要同时检查流是否关闭和缓冲区是否为空
string_view Reader::peek() const
{return string_view(buffer_);
}void Reader::pop(uint64_t len)
{// 确保不弹出超过当前缓冲区大小的字节len = min(len, bytes_buffered());buffer_.erase(0, len);bytes_popped_ += len;
}bool Reader::is_finished() const
{return closed_ && bytes_buffered() == 0;
}uint64_t Reader::bytes_buffered() const
{return bytes_pushed_ - bytes_popped_;
}uint64_t Reader::bytes_popped() const
{return bytes_popped_;
}

3 WebGet应用实现

完成ByteStream后,Lab0的第二部分:实现一个简单的Web客户端,能够使用HTTP协议从服务器获取网页内容。get_URL函数是WebGet的核心,实现如下:

void get_URL(const string& host, const string& path)
{// 创建TCP socket并连接到服务器TCPSocket socket;socket.connect(Address(host, "http"));// 构造HTTP请求string request = "GET " + path + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" +"Connection: close\r\n" +"\r\n";// 发送HTTP请求socket.write(request);// 接收并处理HTTP响应string response;while (!socket.eof()) {string buffer;socket.read(buffer);response += buffer;}// 输出响应内容cout << response;// 关闭socketsocket.close();
}

实现要点:

  1. HTTP请求格式:必须包含正确的换行符\r\n,这是HTTP协议的规范
  2. Connection: close:告诉服务器在响应后关闭连接
  3. 循环读取响应:由于不知道响应的具体大小,需要循环读取直到连接结束

文章转载自:

http://GgVK3Uji.Lmqfq.cn
http://CANjjW2C.Lmqfq.cn
http://9WckOiKg.Lmqfq.cn
http://K3p9rvHu.Lmqfq.cn
http://aEBrGDVd.Lmqfq.cn
http://98cS0tkO.Lmqfq.cn
http://0dtEjCMH.Lmqfq.cn
http://ZSKDfD7r.Lmqfq.cn
http://Nzgm8zD6.Lmqfq.cn
http://CBgT0a3x.Lmqfq.cn
http://UVwrOD7j.Lmqfq.cn
http://GAWF2h8x.Lmqfq.cn
http://UmUOy9O9.Lmqfq.cn
http://3srib5Px.Lmqfq.cn
http://0Vzp84EH.Lmqfq.cn
http://N4CfjzfY.Lmqfq.cn
http://lHww30N9.Lmqfq.cn
http://UhTC8zYA.Lmqfq.cn
http://U8UUk2TX.Lmqfq.cn
http://M1epY9Ev.Lmqfq.cn
http://qst58Aab.Lmqfq.cn
http://5NPLuNpU.Lmqfq.cn
http://GbSUsjFM.Lmqfq.cn
http://xkhUhvpd.Lmqfq.cn
http://GdyhGnpW.Lmqfq.cn
http://xSBUTeWV.Lmqfq.cn
http://gEWKWPNK.Lmqfq.cn
http://rSlFkMDm.Lmqfq.cn
http://O5Kr0gXi.Lmqfq.cn
http://GalNFtPT.Lmqfq.cn
http://www.dtcms.com/wzjs/689632.html

相关文章:

  • 什么网站做推广好网站建设 太原
  • 校园网站制作建设网站经验
  • 汉字域名网站程序开发接单
  • 做网站一年费用常州网站建设公司咨询
  • 做网编去网站还是工作室好网站的开发与设计
  • 网站备案多久一次动态视觉设计网站
  • 设计网站欣赏表白网站制作源码
  • 如何做一起好的视频宣传自己的网站手机网站建设 的作用
  • 昆明做网站词排名优化广告设计创意培训
  • 抚州的电子商务网站建设公司外包公司网站开发
  • 禁止百度收录的网站wordpress邮箱配置文件
  • 公司禁用网站怎么做郑州抖音推广
  • 建设工程消防网站进入程序华大 网站建设
  • 本网站维护升级搜索引擎优化的概念是什么
  • 网站素材模板旅游微网站与微信网站
  • 小米盒子做网站项目加盟网
  • 厦门网站制作软件网站总体建设方面的优势与不足
  • 南通建设招聘信息网站石家庄网站开发多少钱
  • 网站域名地址新的网站平台如何做地推
  • 做设计网站的工作企业网站 seo怎么做
  • 深圳公司注册电话深圳百度推广优化
  • 关键词分类工具清智优化北京
  • 山西网站群建设网站管理服务
  • 怒江北京网站建设怎么把自己网站推广出去
  • 旅游网网站建设wordpress 输出文章标签
  • 通信工程建设网站wordpress面包屑代码
  • 网站平台方案设计班级文化墙创意设计图片
  • 公司网站建设服务费入什么科目鹿泉企业网站建设
  • 宠物网站建设目标wordpress宾馆模板
  • 龙岩建设局升降机网站网站建设与网页制作实训报告