本文记录了 Lab 0: networking warmup 的实验过程

Lab 材料:Lab 0: networking warmup

热身性质的 Lab,不算太难,这里就主要记录一下两个 task 的一些思路

Task #1:Writing webget

这个任务的目的是使用 OS 提供的 TCP 和 stream-socket 来获取因特网上的 Web 页面。

因为前面的实验指导书已经教了你如何使用终端命令来获取 cs144.keithw.org 中的 /hello;因此我们的代码就按照这个思路来做。在实现之前需要看一下这几个类:FileDescriptorSocketTCPSocketAddress

  • 使用 write 函数将需要请求的内容发送给 server
  • 注意在我们发送完请求信息时需要立刻关闭,使用 shutdown(SHUT_WR)
  • 获取完 server 返回的信息后需要调用 close()

大概也就十行代码左右吧


Task #2:An in-memory reliable byte stream

由于要求你自己添加 ByteStream 的私有成员变量,因此你需要了解一下 Lab 需要我们实现的各个接口的作用。下面给出一个我的实现

1
2
3
4
5
std::deque<char> _ring; //!< store byte stream.
size_t _capacity{}; //!< the maximun number of bytes.
bool _eof; //!< `true` if the output has reached the ending.
size_t _total_read{0}; //!< Total number of bytes popped.
size_t _total_write{0}; //!< Total number of bytes written.

需要注意的是:eof() 函数只有当 input_ended()buffer_empty() 都返回真时才返回真


测试

1
2
make -j4
make check_lab0