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地址,复制在浏览器打开。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「7.9更新日志」JVS·智能BI、逻辑引擎(服务编排)功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

java使用poi-tl模版引擎导出word之列表循环数据渲染

目录 1.模版制作2.开启spring表达式3.编写关键代码接口4. 导出结果 poi-tl模版引擎中&#xff0c;如果区块对的值是一个非空集合&#xff0c;区块中的文档元素会被迭代渲染一次或者N次&#xff0c;这取决于集合的大小&#xff0c;类似于foreach语法。 1.模版制作 在静态资源目…

[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)

[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVISP 2024&#xff09; 2024 International Conference on Virtual Reality, Image and Signal Processing 最新消息ICVISP 2024-已通过ACM出版申请投稿免费参会&#xff0c;口头汇报或海报展示(可获得…

品牌推广的要素有哪些?探寻最佳实践方法

作为一个手工酸奶品牌的创始人&#xff0c;目前全国复制了100多家门店。我来和大家分享下品牌推广的基本要素&#xff0c;以及最佳实践方法&#xff01; 一、品牌推广基本要素 1、目标市场分析 品牌推广的第一步就是明确目标市场。先了解目标受众的年龄、性别、消费习惯、有…

centos在GitHub上下载代码

1、安装git yum install -y git2、下载 git clone https://github.com/dji-sdk/Payload-SDK3、若遇到 centos 7 git clone 报错&#xff1a;fatal: unable to access解决方法&#xff1a; 3.1、 打开/etc/hosts文件&#xff1b;命令&#xff1a;sudo vim /etc/hosts 3.2、 添…

MFC扩展库BCGControlBar Pro v35.0 - 可视化管理主题等全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了&#xff0c;这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

ASUS NUC 14 Pro+:掌中宇宙,性能无界

在这个追求多样性的斜杠时代&#xff0c;ASUS NUC 14 Pro 顺势而生&#xff0c;将浩瀚宇宙般的强大性能浓缩于方寸之间&#xff0c;它不仅是一款设备&#xff0c;更是助您探索多重身份的斜杠伙伴&#xff01; 浑然天成&#xff0c;简约而不简单 小巧的机身、简约的线条、精致的…

【电脑应用技巧】如何寻找电脑应用的安装包华为电脑、平板和手机资源交换共享

电脑的初学者可能会直接用【百度】搜索电脑应用程序的安装包&#xff0c;但是这样找到的电脑应用程序安装包经常会被加入木马或者强制捆绑一些不需要的应用装入电脑。 今天告诉大家一个得到干净电脑应用程序安装包的方法&#xff0c;就是用【联想的应用商店】。联想电脑我是一点…

哈喽GPT-4o,程序员如何通过GPT-4o提高办公效率

目录 一、编写工作汇报Prompt&#xff1a;我是一名Java开发工程师&#xff0c;请写一份工作总结&#xff0c;工作内容是一个SpringBootVue实现的图书管理系统&#xff0c;按下面的结构来撰写&#xff1a;1. 工作背景&#xff1b;2. 工作内容&#xff1b;3. 工作建议&#xff1b…

文献解读-多组学-第十七期|《基于多组学分析和综合模型的三阴性乳腺癌腋窝淋巴结转移预测》

关键词&#xff1a;多组学分析&#xff1b;基因测序&#xff1b;多组学模型&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated…

【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

一、什么是openssl&#xff1f; OpenSSL 是一个开源的软件库&#xff0c;它提供了一系列加密工具和协议&#xff0c;主要用于实现安全通信&#xff0c;如在网络上的数据传输。它支持多种加密算法&#xff0c;包括对称加密、非对称加密、散列函数、伪随机数生成器、数字签名、密…

基于vue的引入登录界面

以下是一些常见的登录页面布局&#xff1a; 1. 中心布局 - 登录表单位于页面的中心位置&#xff0c;通常包括用户名输入框、密码输入框、登录按钮等元素。页面背景简洁&#xff0c;以突出登录表单。 - 这种布局常见于大多数网站和应用&#xff0c;简洁明了&#xff0c;用户注意…

Kubernetes 为pod指定DNS

在k8s里面&#xff0c;默认创建pod会给pod默认分配一个默认的dns&#xff0c;这个dns是哪来的呢&#xff1f;可不可以改成其他的dns呢&#xff1f; 先进入到pod里面来&#xff0c;可以看到这里面默认设置的DNS服务器&#xff0c;这个服务器地址为10.96.0.10。这个地址是k8s自动…

RFID智能锁控系统在物流安全运输中的应用与效益分析

一、物流锁控系统现状与挑战 1.1 传统锁控系统的局限性 安全性不足&#xff1a;机械锁容易被撬开或钥匙被复制&#xff0c;导致货物在运输过程中面临被盗风险。 无法实时追踪&#xff1a;一旦货物离开发货点&#xff0c;物流公司无法实时监控货物状态&#xff0c;增加了货物…

【前端】包管理器:npm、Yarn 和 pnpm 的全面比较

前端开发中的包管理器&#xff1a;npm、Yarn 和 pnpm 的全面比较 在现代前端开发中&#xff0c;包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖&#xff0c;还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器&#xff1a;npm、Yarn 和 pnpm&am…

软考五个高级科目怎么选?如何一口气拿下证书!

软考高级包括&#xff1a; 信息系统项目管理师、系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师等五个考试。 一、各科特点&#xff1a; 信息系统项目管理师 特点&#xff1a;主要从事信息系统项目管理方面的工作&#xff0c;要求掌握项目管理的知识体系和实…

【ROS2】中级:Launch -将启动文件集成到 ROS 2 包中

目标&#xff1a;向 ROS 2 包添加一个启动文件 教程级别&#xff1a;中级 时间&#xff1a;10 分钟 目录 先决条件 背景 任务 1. 创建一个包2. 创建用于存放启动文件的结构3. 编写启动文件4. 建立和运行启动文件 文档 先决条件 您应该已经学习了如何创建 ROS 2 包的教程。 始终…

【FreeRTOS】configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY宏解析

1、今天在调试串口时&#xff0c;发现在中断调用xQueueSendFromISR后就会出现系统卡死 经过百度和谷歌后发现原来如此&#xff1a; 2、在FreeRTOSConfig.h中有个宏&#xff0c; #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 2 这个宏是用来规定FreeRTOS能干预的…

一篇教会你 位置式PID 在写码中的应用。

前言&#xff1a;编写不易&#xff0c;仅供学习&#xff0c;参考&#xff0c;谢谢理解&#xff0c;请勿转载。 #位置式|增量式PID区别 本系列的前两篇讲的是位置式PID 没有增量式 PID &#xff0c;PID的变种有很多&#xff0c;常见的有 位置式PID 增量式PID PI PD 抗…

PHP7.4安装使用rabbitMQ教程(windows)

&#xff08;1&#xff09;&#xff0c;安装rabbitMQ客户端erlang语言 一&#xff0c;erlang语言安装 下载地址1—— 下载地址2——https://www.erlang.org/patches/otp-27.0 二&#xff0c;rabbitMQ客户端安装 https://www.rabbitmq.com/docs/install-windows &#xff08…