# 计算机网络通信大作业 **Repository Path**: selina_dev/http-comm ## Basic Information - **Project Name**: 计算机网络通信大作业 - **Description**: 详见readme - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 计算机网络与通信大作业实验报告 ## 项目代码 https://gitee.com/piamen/http-comm ## 实现环境 ### 服务器端 本实验中,服务器运行在Ubuntu18.04下,采用Tomcat-9.0.36作为服务器软件,通过花生壳内网穿透实现公网访问。 服务器应用程序使用Java语言,借助Servlet技术编写,搭配mysql-5.7.30数据库实现数据存取功能。 ### 客户端 本实验采用TTGO模块作为客户端,乐鑫生产的ESP32模块可以进行WIFI通信,TTGO模块在集成ESP32的基础上,增加了一块显示屏,方便调试与结果显示。 TTGO客户端使用C++语言,在Arduino IDE环境中编程,实现POST请求。 ## 实现过程 ### 服务器端实现 服务器端的环境要响应发送数据的POST请求并将数据存储至服务器端,同时要响应读取数据的POST请求,并将数据返回。 1. 环境配置 Tomcat是基于Java编写的服务器软件,而且后续编写服务器应用程序也需要Java编译环境,所以本实验首先进行了Java环境的安装与变量的配置。紧接着安装了Tomcat以及mysql。 2. 创建mysql数据表 使用root账户登入,输入 ```sql >> CREATE TABLE `students` ( `id` int NOT NULL COMMENT '学生学号', `name` char(20) NOT NULL DEFAULT '' COMMENT '学生姓名', `time` BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY (`time`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; ``` 3. 编写服务器应用程序 本Servlet服务器应用程序未使用IDE生成编写,而是手动进行工程的配置。 Tomcat的Servlet工程的基本目录如下 └── WEB-INF     ├── classes     └── web.xml 其中,web.xml文件是用于配置该服务器应用程序的,classes目录下存放编译好的class文件,java源文件最好新建src目录存放,不过因为本实验是手动配置项目,为了便于编译命令的编写,将java文件和class文件都存放在classes目录下。 web.xml中,有关配置如下 ```xml Show Show Send Send Show /Show Send /Send ``` java核心代码如下: SqlUtil.java ```java public class SqlUtil { public void Insert(Student student); public Student[] Query(); } ``` Send.java ```java String name = request.getParameter("name"); String id = request.getParameter("id"); SqlUtil sqlUtil = new SqlUtil(); sqlUtil.Insert(new Student(Integer.parseInt(id), name, new Long((long)-1))); ``` Show.java ```java Student[] students = sqlUtil.Query(); for (int i = 0; i < students.length; i++) { out.println("姓名: " + students[i].getName() + " "); out.println("学号: " + students[i].getId()+ "
"); } ``` 4. 运行服务器 终端中,运行以下命令 ```sh /usr/local/tomcat/apache-tomcat-9.0.36/bin$ sudo ./startup.sh ``` 5. 花生壳映射 服务器中,运行以下命令 ```sh $ ifconfig ``` 记录IP地址 在另一台电脑中运行Windows下的花生壳软件,输入刚才的IP地址以及对应的端口,打开映射。 至此,服务器端准备完成。 ### 客户端实现 核心代码 ```C++ String data = "name=严霜&id=1120172019"; int length = data.length(); String postRequest = (String)("POST ") + "/"+"homework/Send"+" HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: Keep Alive\r\n" + "Content-Length: " + length + "\r\n" + "Accept: */*\r\n" + "Origin: http://"+host+"\r\n" + "Upgrade-Insecure-Requests: 1"+"\r\n" + "Content-Type: application/x-www-form-urlencoded;" + "\r\n" + "User-Agent: zyzandESP8266\r\n" + "Accept-Encoding: gzip, deflate"+"\r\n" + "Accept-Language: zh-CN,zh;q=0.9"+"\r\n" + "\r\n" + data + "\r\n"; client.connect(host, 80)); client.print(postRequest); ``` ## 实验结果 在Arduino环境中编写代码,烧录进TTGO中,观察串口监视器。 串口监视器输出 ``` .WIFI Connected IP Address:192.168.31.73 尝试访问服务器 访问成功 POST /homework/Send HTTP/1.1 Host: 18608f8u76.iok.la Connection: Keep Alive Content-Length: 25 Accept: */* Origin: http://18608f8u76.iok.la Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded; User-Agent: ESP32 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 name=严霜&id=1120172019 Response: >>HTTP/1.1 200 >>Content-Length: 43 >>Date: Thu, 18 Jun 2020 06:44:13 GMT >> >>You put name: 严霜 >>You put ID: 1120172019 >> ``` 通过浏览器访问http://18608f8u76.iok.la/homework/Show,得到如下结果 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200618153625979.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BpYW1lbg==,size_16,color_FFFFFF,t_70) (其中部分为测试数据) ## 附 发送地址:http://18608f8u76.iok.la/homework/Send 显示地址:http://18608f8u76.iok.la/homework/Show