计算机网络cs144之lab0

本文详细介绍了如何在Linux环境下通过telnet模拟浏览器发送HTTP请求,并使用TCPSocket实现WebGet功能。此外,还探讨了自定义内存中可靠的字节流数据结构,即ByteStream,用于在TCP连接中确保数据传输的可靠性。
摘要由CSDN通过智能技术生成

1 建立课程开发环境

课程使用的是基于Linux的系统,可以使用ubuntu发行版。(安装过程略过)
可参考:https://blog.csdn.net/u_hcy2000/article/details/121506905?spm=1001.2014.3001.5501

2 Fetch a Web page

使用telnet来体会浏览器是如何通过HTTP协议从服务器获取一个页面(HTML文档)的

2.1 浏览器发送http请求

  1. 通过浏览器发送 http://cs144.keithw.org/hello 请求
  2. 查看页面响应结果:Hello, CS144!

2.2 telnet模拟浏览器发送http请求

键入 telnet cs144.keithw.org http,http请求与服务器建立连接
键入 GET /hello HTTP/1.1 ,这句话告诉服务器 URL 的路径(path)
键入 Host: cs144.keithw.org 这告诉服务器 URL 的主机(host)
键入Connection: close 结束请求
键入 空行,完成了http请求

查看服务器的响应信息如下:
在这里插入图片描述
扩展:HTTP请求简介
设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
HTTP 请求一共分为四个部分:请求行,请求头,空行,请求体。
在这里插入图片描述
HTTP响应报文格式:响应行、响应头、空行、响应体 四个部分。
在这里插入图片描述

3 WebGet

使用TCPSocket来实现发送http请求,并获取响应信息,打印出来。

  1. 创建一个TCPSocket并与服务器建立连接。
  2. 向服务器发送请求,格式参照前面fetch a web page部分,注意在HTTP中每行的结尾应该为\r\n。
  3. 发送完请求后,客户端应该关闭TCPSocket的写功能,对应前面的Connection:close,告诉服务器请求已经发送完毕,服务器只要回复完数据后就可以立刻断开连接。
  4. 循环读取从服务器发送过来的信息,直到遇到EOF(end of file)。 最后记得需要关闭前面创建的TCPSocket。

课程代码:

void get_URL(const string &host, const string &path) {
   
    // telnet cs144.keithw.org http
    // GET /hello HTTP/1.1
    // Host: cs144.keithw.org
    // Connection: close

    // 创建一个客户端对象
    TCPSocket client_socket;
    // 与服务器建立TCP连接
    client_socket.connect(Address(host, "http"));
    // 客户端发送请求request
    string reqMsg = "GET "+path+" HTTP/1.1\r\n"+"Host: "+host+"\r\nConnection: close\r\n\r\n";
    client_socket.write(reqMsg);

    // 客户端接收服务端的响应response
    while(!client_socket.eof()){
   
        string recvMsg = client_socket.read(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值