Web服务器-服务器开发-返回固定页面的HTTP服务器(3.3.1)

1.注意

浏览器解析的时候偶\r\n才算一个换行符
发送的str要编码,这里使用的是utf8
其他的都和上一篇没有什么区别
这里主要返回的是固定的网址

2.代码

from socket import *

def service_client(new_socket):
    '''为这个客户端返回数据'''

    # 1.接收浏览器发送过来的请求,即http请求
    #GET /HTTP/1.1
    # ...
    request = new_socket.recv(1024)

    #2,返回http格式的数据给浏览器
    #2.1准备发送给浏览器的数据 ---header
    response = "HTTP/1.1 200 OK\r\n"#正常浏览器\r\n代表的是换行
    response += "\r\n"
    #2.2准备发送给浏览器的数据
    response += "hahaha"
    new_socket.send(response.encode("utf-8"))

    #3.关闭套接字
    new_socket.close()


def main():
    '''用来完成整体的控制'''
    #1.创建套接字
    tcp_server_socket = socket(AF_INET, SOCK_STREAM)

    # 2.绑定本地信息
    port = 7891
    address = ('', port)
    tcp_server_socket.bind(address)

    # 3.变为监听,将主动套接字变为被动套接字
    tcp_server_socket.listen(128)

    #等待连接
    while True:
        client_socket, clientAddr = tcp_server_socket.accept()
        # 接收对方发送过来的数据
        service_client(client_socket)


    # 关闭监听套接字
    tcp_server_socket.close()


if __name__ == "__main__":
    main()

关于作者

个人博客网站
个人GitHub地址
个人公众号:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Arduino LED 控制代码,通过 MOTT 服务器控制: ```C++ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPClient.h> // Replace with your network credentials const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // MOTT server details const char* server = "api.meross.com"; const int port = 80; const char* device_id = "your_device_id"; const char* key = "your_key"; // LED pin const int ledPin = 13; // Web server ESP8266WebServer httpServer(80); void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); // Connect to Wi-Fi network WiFi.begin(ssid, password); Serial.println("Connecting to Wi-Fi..."); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting..."); } Serial.println("Connected to Wi-Fi"); // Start web server httpServer.on("/", handleRoot); httpServer.begin(); } void loop() { httpServer.handleClient(); } void handleRoot() { String state = httpServer.arg("state"); if (state == "on") { digitalWrite(ledPin, HIGH); controlDevice("on"); } else if (state == "off") { digitalWrite(ledPin, LOW); controlDevice("off"); } httpServer.send(200, "text/plain", "OK"); } void controlDevice(String state) { // Create HTTP client WiFiClient client; if (!client.connect(server, port)) { Serial.println("Connection failed"); return; } // Create JSON payload String payload = String("{\"header\":{\"messageId\":\"12345678901234567890123456789012\",\"method\":\"SET\",\"namespace\":\"Appliance.Control.Toggle\",\"payloadVersion\":1},\"payload\":{\"togglex\":{\"onoff\":") + state + String("},\"channel\":0}}"); // Create HTTP request String url = String("/config/v1/switch/") + device_id + String("/0"); HTTPClient http; http.begin(client, server, port, url); http.addHeader("Authorization", key); http.addHeader("Content-Type", "application/json"); int httpCode = http.PUT(payload); http.end(); // Check HTTP response if (httpCode > 0) { Serial.printf("[HTTP] PUT... code: %d\n", httpCode); if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } } else { Serial.println("HTTP request failed"); } } ``` 这个代码假设你已经在 MOTT 平台上创建了一个开关设备,并且有一个设备 ID 和 API 密钥。你需要将这些信息替换为代码中的 `device_id` 和 `key`。 你可以使用一个简单的 HTML 页面与该代码进行交互。以下是一个示例页面: ```HTML <!DOCTYPE html> <html> <head> <title>LED Control</title> <meta charset="utf-8"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("#on").click(function() { $.get("?state=on"); }); $("#off").click(function() { $.get("?state=off"); }); }); </script> </head> <body> <button id="on">ON</button> <button id="off">OFF</button> </body> </html> ``` 你可以将该页面保存为 `index.html` 并上传到你的 Arduino 板上。然后通过浏览器访问该页面,即可控制 LED 灯。 请注意,代码中的 `controlDevice` 函数使用 MOTT 平台的 REST API 来控制开关设备。该函数发送一个 PUT 请求,将设备的状态设置为打开或关闭。在实际应用中,你需要根据你的设备类型和 MOTT 平台的 API 文档来修改该函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值