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或热点,并且随便写一个网址。

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

相关推荐
DYWorker0012 分钟前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
深圳恒讯42 分钟前
国外云服务器部署企业官网,怎样确定配置、IP 与后续扩容方案?
运维·服务器·tcp/ip
Lzg_na2 小时前
数据链路层差错控制使用的算法详解
网络
努力努力再努力wz2 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
loulanyue_2 小时前
当AI学会自主攻击与渗透破壁:Agent行为链失控与Mythos级攻防颠覆下的安全范式重构——读CNCC2026第六届网络生态治理论坛实录
网络·人工智能·安全
2401_868534783 小时前
英语演讲:麻省理工校长2024年毕业典礼演讲
服务器·网络
码完就睡3 小时前
Linux——以太网协议
运维·服务器·网络·1024程序员节
CV爱数码4 小时前
论文精读|RED-CNN:残差编解码网络,低剂量 CT 去噪的经典基线
网络·人工智能·算法·cnn·ct·重建·x-ray
星恒讯工业路由器4 小时前
Modbus透传和Modbus网关有什么区别?从字节转发到协议翻译的选型思路
网络·物联网·modbus·工业物联网·工业网关·rs485·协议转换
李&@杰4 小时前
交换机PoE供电不足导致AP反复重启故障处理
网络·华为