ESP32网络开发:1.创建一个基于TCP网络协议的网站

一、TCP协议的介绍

        TCP(传输控制协议,Transmission Control Protocol)是互联网协议套件中的一种核心协议,主要用于在网络中的计算机之间可靠地传输数据。TCP协议位于OSI模型(开放系统互联模型)的传输层,它为应用层协议(如HTTP、FTP、SMTP等)提供服务。

        以下是TCP协议的一些关键特性,用通俗易懂的方式解释:

  1. 连接导向:TCP协议在数据传输之前,需要在发送方和接收方之间建立一个连接。这就像打电话,需要先拨号,对方接听后,双方才能开始通话。

  2. 可靠性:TCP确保数据包能够无误地从发送方传输到接收方。如果某个数据包在传输过程中丢失或损坏,TCP会负责重新发送这个数据包。这就像邮寄包裹,如果包裹丢失,邮局会负责重新邮寄。

  3. 顺序保证:即使数据包通过不同的路径传输,TCP也能确保它们按照发送的顺序到达接收方。这就像排队买票,即使有人插队,最终大家还是按照先来后到的顺序买到票。

  4. 流量控制:TCP可以调整数据传输的速率,以避免发送方发送数据过快,导致接收方处理不过来。这就像交通流量控制,通过红绿灯调节车辆的通行速度,避免交通拥堵。

  5. 拥塞控制:当网络拥堵时,TCP会减少数据的发送速率,以避免加剧网络拥堵。这就像在繁忙的街道上,司机看到前方拥堵,会减速行驶,避免造成更大的交通堵塞。

  6. 错误检测:TCP使用校验和(checksum)来检测数据包在传输过程中是否发生错误。这就像快递包裹上的条形码,可以用来检查包裹是否在运输过程中受损。

        总结来说,TCP协议就像一个可靠的邮递服务,确保信件(数据包)能够准确、有序地从发送方传递到接收方,并且在传递过程中进行流量和拥塞控制,确保整个过程顺畅无误。

二、详细代码

        这里需将ssid和password改为你对应的WIFI或热点,并且随便写一个网址。

#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiServer.h>

// 替换为你的WiFi网络名称和密码
const char* ssid = ".....";
const char* password = ".....";

// 定义TCP服务器的端口号
const int port = 80;

// 创建一个TCP服务器实例
WiFiServer server(port);

void setup() {
  Serial.begin(115200);
  delay(1000);

  // 连接到WiFi网络
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // 启动TCP服务器
  server.begin();
  Serial.println("TCP server started.");
}

void loop() {
  // 检查是否有客户端连接
  WiFiClient client = server.available();

  if (client) {
    Serial.println("New client connected.");

    // 读取客户端请求
    String request = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        request += c;

        // 如果请求结束,发送响应
        if (c == '\n') {
          // 发送HTTP响应
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println();
          client.println("<!DOCTYPE html>");
          client.println("<html>");
          client.println("<head>");
          client.println("<title>ESP32 Sci-Fi Web Server</title>");
          client.println("<style>");
          client.println("body { font-family: 'Courier New', monospace; background-color: black; color: #00FF00; }");
          client.println("h1 { color: #00FF00; }");
          client.println("button { background-color: #00FF00; color: black; border: none; padding: 10px 20px; font-size: 16px; cursor: pointer; }");
          client.println("button:hover { background-color: #00CC00; }");
          client.println("</style>");
          client.println("</head>");
          client.println("<body>");
          client.println("<h1>Welcome to the Web Server</h1>");
          client.println("<p>This is a web interface powered by ESP32, m3?</p>");
          client.println("<button onclick=\"alert('Restart')\">Button 1</button>");
          client.println("<button onclick=\"alert('Self-destruction')\">Button 2</button>");
          client.println("<button onclick=\"alert('Send gifts')\">Button 3</button>");
          client.println("</body>");
          client.println("</html>");
          client.println();

          // 关闭连接
          client.stop();
          Serial.println("Client disconnected.");
          break;
        }
      }
    }
  }
}

三、打开网址

        程序下载完成后,先打开串口调试助手,选择打印出来的IP地址,复制在浏览器打开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/790990.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机内安装vue-dev-tools

前言 项目开发调试都需要在Citrix在虚拟机环境下&#xff0c;Citrix内连接不到外网&#xff0c;在这边文章&#xff0c;我将介绍自己在Citrix环境内安装 vue-dev-tools的经验 环境 vue 步骤 1. 下载.crx文件 百度网盘里的 .crx文件的 下载链接 2. 加载.crx文件 打开浏览…

软件兼容性测试重要吗?有哪些测试流程和注意事项?

软件兼容性测试是指测试软件在不同硬件、操作系统、网络环境和软件环境下的稳定性和可用性的能力&#xff0c;也就是说&#xff0c;软件在不同的平台上是否能正常运行&#xff0c;是否能与其他软件和系统兼容。 兼容性问题是影响软件用户体验的重要因素之一&#xff0c;如果软…

学习大数据DAY13 PLSQL基础语法2

目录 选择结构 IF语句 简单判断语句 带判断不成立语句 多判断语句 IF语句注意事项&#xff1a; CASE 语句 简单CASE语句 搜索型CASE语句 作业 循环语句 循环结构 简单循环 属性 描述 位置 场景 WHILE循环 属性 FOR循环 数值型for循环 数值型for循环的特性…

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…

谷粒商城实战笔记-24-分布式组件-SpringCloud Alibaba-Nacos配置中心-命名空间与配置分组

文章目录 一&#xff0c;命名空间1&#xff0c;简介1.1&#xff0c;命名空间的主要功能和特点1.2&#xff0c;使用场景1.3&#xff0c;如何指定命名空间 2&#xff0c;命名空间实战2.1&#xff0c;环境隔离2.2&#xff0c;服务隔离 二&#xff0c;配置集三&#xff0c;配置集ID…

HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>3D effect&…

线下线上游戏电竞陪伴APP小程序H5同城线下约玩APP开发,语聊约玩平台搭建游戏陪玩APP源码

开发一款线下陪玩约玩APP的实际意义和在生活中的应用场景 1、满足社交需求:现代社会人们的社交圈往往受到时间、地点和其他限制的影响。线下陪玩约玩APP可以提供一个平台&#xff0c;让用户通过约玩的方式结识新朋友、扩大社交圈 2、解决孤独感:有些人由于工作忙碌、居住环境单…

MySQL体系架构解析

1.MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle …

YOLOv10改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块)&#xff0c;我们将其用于C2f中组合出一种新的结构&#xff0c;来替换我们网络中的模块可以达到一种轻量化的作用&#xff0c;我将其…

ENSP软件中DHCP的相关配置以及终端通过域名访问服务器

新建拓扑 配置路由器网关IP 设备配置命令&#xff1a;<Huawei> Huawei部分为设备名 <>代表当下所在的模式&#xff0c;不同模式下具有不同的配置权限<Huawei> 第一级模式&#xff0c;最低级模式 查看所有参数<Huawei>system-view 键入系统视图…

通过 tomcat 让手机访问到电脑写的 html 网页

之前实现的 html 小项目只能在自己的电脑上展示&#xff0c;如果要在其他电脑或者在手机上就看不到网页了 想要在手机上访问自己写的网页&#xff0c;我们可以借助 tomcat 首先我们可以从官网下载 tomcat 官网链接&#xff1a;apache官网 我们拉到最底部&#xff0c;找到 a…

C. Earning on Bets

题目 个人补充&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long longconst int maxn 1e6 5, in…

Apache Hadoop之历史服务器日志聚集配置

上篇介绍了Apache Hadoop的分布式集群环境搭建&#xff0c;并测试了MapReduce分布式计算案例。但集群历史做了哪些任务&#xff0c;任务执行日志等信息还需要配置历史服务器和日志聚集才能更好的查看。 配置历史服务器 在Yarn中运行的任务产生的日志数据不能查看&#xff0c;…

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介绍&#xff1a; 1.2 属性介绍&#xff1a; 1.3细节理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-网格布局&#xff1a; 3.1QGridLayout介绍&#xff1a; 3.2常用方法&#xff1a…

YOLOv10改进 | Conv篇 | 利用CVPR2024-DynamicConv提出的GhostModule改进C2f(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

MAVAE

1 自动下载项目所需要的jar包&#xff0c;统一管理jar包之间的依赖关系 2完成项目构建 maven的安装与配置 ​ 安装jdk环境&#xff1a;maven的运行需要依赖jdk。 下载maven。官网下载&#xff1a;Maven – Download Apache Maven 将下载的maven压缩包直接解压到本地磁盘即可。…

【网络安全】SSRF 之 Azure Digital Twins Explorer

未经许可&#xff0c;不得转载。 文章目录 正文 正文 Azure Digital Twins 是一个微软下的平台服务&#xff0c;允许开发者创建和运行数字孪生模型&#xff0c;这些模型能够反映物理世界中的实体及其关系&#xff0c;通过这些模型可以进行监控、分析和预测等操作。 1、进入主…

MACOS查看硬盘读写量

一、安装Homebrew 按照提示进行安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"二、安装smartmontools brew install smartmontools三、查看硬盘读写量等信息 sudo smartctl -a /dev/disk0

手机容器化 安装docker

旧手机-基于Termux容器化 1、安装app 在手机上安装Termux或ZeroTermux&#xff08;Termux扩展&#xff09; 1.1 切换源 注&#xff1a;可以将termux进行换源&#xff0c;最好采用国内源&#xff0c;例如&#xff1a;清华源等 更新包列表和升级包&#xff08;可选&#xff0…

VUE超详细入门

目录 1.什么是 Vue.js 2.Vue.js 优点 Vue中的第一个hello world Vue指令 v-model v-bind v-on v-if v-show v-for Vue 实例生命周期 从传统架构转向单文件架构(通过组件拼接) 安装element-ui使用 1.什么是 Vue.js Vue (读音 /vju ː /&#xff0c;类似于 view) 是…