# 实验一

### 🤝关于环境配置

实验文档里有多种环境配置方式：WSL，虚拟机镜像（只限amd64，为什么？因为不用镜像mac只能装纯命令行的ubuntu，~~有Mac的可以尝试安装一下非镜像吃苦~~),vscode Remote,以及未提到的真机和双操作系统。

如果你是Mac用户，愿意折腾的话就用镜像，~~但是还是建议放弃Mac再买个电脑。~~

如果你是arm64架构，实验手册推荐vscode remote,用remote如果你能连上的话可以保证实验流程没问题。

但是vscode remote太麻烦，如果你的x86机子手笨配不明白的话，使用虚拟机镜像（它提供的和ubuntu官网<https://ubuntu.com/desktop>的镜像都可以,apt install 东西是你自己的事，只不过助教给的镜像已经给你搞好了）。

这里提一个版本的事，目前ubuntu官网给的是24.04版本的镜像，但是我还是推荐用22.04LTS的镜像，保证一些老软件的依赖兼容（22.04的镜像STFW很容易找到）。

WSL不推荐（也不应该用！），原因详见原实验文档。

还有一个选择就是用真机装一个ubuntu系统，相信我，你会爱上它的qwq,再好的虚拟机都没有真机爽，真机还能随意魔改和配奇奇怪怪的东西hhh

双系统的话如果你很自信可以搞（不过容易翻车，不推荐)

***

## :thumbsup:关于Mininet

实验文档写的很好，如果你看不懂，请上手跟着操作。（在实验中你也会慢慢理解）

重点是要开两个终端，一个server端,一个client端，分别做不同的指令（建议操作：终端一tcp\_topo.py,终端二mnexec -a xxx bash）,实验中就明白了。

***

## :angry:实验文档补充理解

1.这个实验要写什么？  http-server.c,处理客户端请求报文的一个c文件。(注意：虽然说是http-server,但是你还是要http和https的报文都处理)

2.为什么要实现多线程？ &#x20;

如果你没有在高级程序设计大作业写过多线程项目，你可能不太理解。其实就是告诉你http和https的状态码报文处理是两个独立的线程，不应该互相干扰（引用我当年高程助教的话，多线程就是同时干两拨活，记得加锁解锁就行）。

3.https-server-example文件是干嘛的？

给你一个例子，你在理解了后完全可以仿照它的框架写http-server.c。（当然，你也可以不用他的框架，~~因为这个框架太简单deepseek老师可以轻松写对socket编程~~）

注意写完http-server.c后要把这个example文件移到别的地方去，要么Makefile只会编译example,不会编译你的。（原因可作为学习阅读Makefile的习题）。

4.（重点）实验要求里说80（http）只处理301状态码，443端口(https)才处理其他状态码,但是为啥test.py里有80端口的其他状态码的测试样例？

想想301状态码是干什么的！提示：实验文档是对的，80确实只处理301，想想什么叫重定向？80收到的其他状态码被重定向到了哪里？

想明白这个，状态码部分的代码应该就会写了。

***

## :robot:一些细节感悟

1.你可以面向test.py的样例编程（反正这只是一个示例项目），当然也可以变成泛用性的代码。

2.如果你的框架写的还行，代码应该小于300行。

3.实验文档的https简介和socket编程写的很好（甚至socket编程函数介绍顺序就是你代码应该写的函数顺序）。

4.如果你发现传回的报文不对，可以用pdb(使用方法请STFW)调试test.py来检查返回报文的正确性、

5.程序不停止只能ctrl+c停止是正常的（想想为什么？）。

6.返回的报文需要符合教材上的定义（不会可以问deepseek），少了一些部分可能会导致你本地assert能过OJ过不去。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blueroaring-njus-organization.gitbook.io/njucs_25spring_network-exp_additional/zheng-pian/shi-yan-yi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
