博客
关于我
CS144 计算机网络实验lab1环境搭建以及实验过程(测试百分百通过)
阅读量:292 次
发布时间:2019-03-01

本文共 4025 字,大约阅读时间需要 13 分钟。

环境搭建

Vmware虚拟机

Ubuntu20.04

执行官方提供的shell脚本下载环境依赖

vscode remote

 

先看主函数

#include "socket.hh"#include "util.hh"#include 
#include
using namespace std;void get_URL(const string &host, const string &path) { // Your code here. // You will need to connect to the "http" service on // the computer whose name is in the "host" string, // then request the URL path given in the "path" string. // Then you'll need to print out everything the server sends back, // (not just one call to read() -- everything) until you reach // the "eof" (end of file). cerr << "Function called: get_URL(" << host << ", " << path << ").\n"; cerr << "Warning: get_URL() has not been implemented yet.\n";}int main(int argc, char *argv[]) { try { if (argc <= 0) { abort(); // For sticklers: don't try to access argv[0] if argc <= 0. } // The program takes two command-line arguments: the hostname and "path" part of the URL. // Print the usage message unless there are these two arguments (plus the program name // itself, so arg count = 3 in total). if (argc != 3) { cerr << "Usage: " << argv[0] << " HOST PATH\n"; cerr << "\tExample: " << argv[0] << " stanford.edu /class/cs144\n"; return EXIT_FAILURE; } // Get the command-line arguments. const string host = argv[1]; const string path = argv[2]; // Call the student-written function. get_URL(host, path); } catch (const exception &e) { cerr << e.what() << "\n"; return EXIT_FAILURE; } return EXIT_SUCCESS;}

 这个内容是用C++实现一个获取http服务器数据的简单客户端程序。回顾一下用原始API写一个客户端的过程,以及简单的HTTP协议头的写法。

这里已经封装好了相关的类,在TcpSocket中,阅读源码调用即可。

void get_URL(const string &host, const string &path) {    // Your code here.    // You will need to connect to the "http" service on    // the computer whose name is in the "host" string,    // then request the URL path given in the "path" string.    // Then you'll need to print out everything the server sends back,    // (not just one call to read() -- everything) until you reach    // the "eof" (end of file).    // Address address(host);    TCPSocket tcpSocker;    tcpSocker.connect(Address(host,"http"));    tcpSocker.write("GET " + path + " HTTP/1.1\r\n");    tcpSocker.write("Host: " + host + "\r\n");    tcpSocker.write("Connection: close \r\n");    tcpSocker.write("\r\n");    while(!tcpSocker.eof()){        auto buffer = tcpSocker.read();        cout<

第二个任务是实现一个字节流, 有读端和写端,写的数据可能没有完全读出去,所以是一个双端队列,结合提议,很容易想到以下实现

成员函数如下, 在现代C++中,可以直接声明初始化(编译很严格,必须初始化)

class ByteStream {  private:    // Your code here -- add private members as necessary.    // Hint: This doesn't need to be a sophisticated data structure at    // all, but if any of your tests are taking longer than a second,    // that's a sign that you probably want to keep exploring    // different approaches.    size_t capacity;    size_t read_count = 0;    size_t write_count = 0;    bool is_end = false;    bool _error{};  //!< Flag indicating that the stream suffered an error.    std::deque
buffer = {};}

 以下是函数实现

ByteStream::ByteStream(const size_t capacity_):capacity(capacity_){}size_t ByteStream::write(const string &data) {    auto data_size = data.size();    if(data_size>capacity-buffer.size()){        data_size = capacity-buffer.size();    }    write_count += data_size;    for(size_t i=0;i
buffer.size()){ peek_size = buffer.size(); } return string().assign(buffer.begin(),buffer.begin()+peek_size);}//! \param[in] len bytes will be removed from the output side of the buffervoid ByteStream::pop_output(const size_t len) { auto pop_size = len; if(pop_size>buffer.size()){ pop_size = buffer.size(); } read_count++; for(size_t i=0;i
buffer.size()){ read_size = buffer.size(); } read_count += read_size; string str = string().assign(buffer.begin(),buffer.begin()+read_size); for(size_t i=0;i

接下来要做的事,利用GDB调试程序,直到完成所以测试。

转载地址:http://ihqv.baihongyu.com/

你可能感兴趣的文章
Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
查看>>
Nacos启动异常
查看>>
Nacos命名空间配置_每个人用各自自己的命名空间---SpringCloud Alibaba_若依微服务框架改造---工作笔记001
查看>>
Nacos和Zookeeper对比
查看>>
Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
查看>>
Nacos基础版 从入门到精通
查看>>
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(上)
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
查看>>
nacos服务提供和发现及客户端负载均衡配置
查看>>
Nacos服务注册与发现demo
查看>>
Nacos服务注册与发现的2种实现方法!
查看>>
nacos服务注册和发现原理简单实现案例
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>