CS144 Lab0
CS144 Lab0
0 热身
手动给网站发请求
在终端依次输入以下命令:
telnet cs144.keithw.org http
GET /hello HTTP/1.1 //这是在告诉服务url部分
Host: cs144.keithw.org //这是在告诉服务host path
Connection: close //告诉服务你已经完成请求了,服务不久将会返回一个响应
//attention! 这里要输入两个回车,上面每步结束输入一个回车
//attention! 手速要快,太慢会timeout
得到响应:Helo CS144!
手动给自己发邮件
用163发的邮件,先去设置->打开IMAP/SMTP服务,得到授权码并保存。用以下命令得到邮箱账号、授权码的base64编码:
echo -n 待加密的内容 | base64
在终端中依次输入:
telnet smtp.163.com 25
HELO //必须先发这句
AUTH LOGIN
//提示:334 xxxx
依次输入邮箱、授权码的base64编码
//提示: Authentication successful
MAIL FROM: <YouEmail@163.com> //:后的空格和< >都不能省略
//提示:250 Mail OK
RCPT TO: <receiverEmail@163.com>
//提示:250 Mail OK
DATA
//提示:354 End data with <CR><LF>.<CR><LF>
开始写正文
. //用单独一行的.表示输入结束
//提示:250 Mail OK
QUIT //与服务器断开连接
监听端口
在终端中输入
netcat -v -l -p 9090
//提示:telnet localhost 9090
打开另一个终端,输入
telnet localhost 9090
接下来可以从任意终端发消息,另一方都能收到。
1 环境搭建
教程里给了好几种模式,但最新的文档是Fall 2025的,Ubuntu都一路用到24了,我的20.04怕是不够用,为了不在过程中因为未知的意外报错,有条件的建议使用镜像(image)。听说旧版的lab4更难,且对虚拟机要求没那么高,就网上找了别人几年前拉好的仓库:https://gitee.com/kangyupl/sponge Lab0的代码在master分支里,题解在solution里,我们把master下载下来就行。
sponge版本的需要gcc-8,用以下命令更新:
sudo apt-get install gcc-8 g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
gcc -v
//提示是>=8的就行
编译项目
cd sponge
mkdir build
cd build
cmake ..
make
这样就算完成:
2 Solve
阅读文档hint和要求阅读的socket.hh、address.hh文件后,就能明白建立连接需要什么:address、TCPSocket两个类,而发起请求和收到响应的本质是文件的read/write.
void get_URL(const string &host, const string &path) {
Address address = Address(host,"80");
TCPSocket tcpSock = TCPSocket( );
tcpSock.connect(address);
std::string request="GET "+path+" "+"HTTP/1.1\r\n"+
"Host: "+host+"\r\n"+
"Connection: close\r\n\r\n";
tcpSock.write(request);
tcpSock.shutdown(SHUT_WR);
while ( !tcpSock.eof() )
{
std::string str;
tcpSock.read(str);
cerr << str << '\n';
}
tcpSock.close();
cerr << "Function called: get_URL(" << host << ", " << path << ").\n";
}
遇到Bug:
read: Connection reset by peer
并且刚才在终端里telnet时有响应,现在也变成了Connection closed by foreign host.
在排查了环境问题(终端 curl https://youtuber.com/ 能通)和代码问题(和参考写得基本一样,运行别人代码也不行)后,这个问题不是自己造成的,一时间无法解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了