Flask Socket 示例

服务端:

from flask import Flask
from flask_sockets import Sockets
import datetime

app = Flask(__name__)
sockets = Sockets(app)

from flask_cors import *

CORS(app, supports_credentials=True)


@sockets.route('/test')
def echo_socket(ws):
    print("hello")
    while not ws.closed:
        msg = ws.receive().decode()  # 接收的为字节
        print('接收:', msg)
        now = datetime.datetime.now().isoformat()
        ws.send(now)  # 发送数据


@app.route('/')
def hello_world():
    return 'Hello Flask Socket!'


if __name__ == "__main__":
    from gevent import pywsgi
    from geventwebsocket.handler import WebSocketHandler

    server = pywsgi.WSGIServer(('127.0.0.1', 8080), app, handler_class=WebSocketHandler)
    print('server start')
    server.serve_forever()

客户端:

import websocket

ws = websocket.WebSocket()
ws.connect('ws://127.0.0.1:8080/test')
while True:
    text = input('发送:')
    ws.send_binary(text.encode())
    data = ws.recv()
    print('接收:', data)

werkzeug.routing.WebsocketMismatch: 400 Bad Request报错处理
网上的解决方法基本上都是降低 Werkzeug Flask的版本
在这里插入图片描述

这个老哥的方式是更改routing.py的检测 ->跳转
在这里插入图片描述
将此代码注释后可正常交互

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32是一款基于WiFi和蓝牙的低功耗系统级芯片,它可以用于构建物联网设备和其他无线通信应用。在ESP32上,你可以使用socket编程来进行网络通信。 使用socket编程可以实现TCP或UDP的网络通信。在ESP32上,你可以使用ESP-IDF(ESP32的官方开发框架)提供的相关API来操作socket。下面是一个简单的示例,演示如何在ESP32上创建一个TCP socket连接: ```c #include <stdio.h> #include <string.h> #include <sys/param.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_wifi.h" #include "esp_system.h" #include "esp_event.h" #include "esp_log.h" #include "esp_netif.h" #include "esp_eth.h" #include "esp_tls.h" #include "lwip/sockets.h" #define TAG "SOCKET_EXAMPLE" void tcp_client_task(void *pvParameters) { char addr_str[128]; int addr_family; int ip_protocol; while (1) { struct sockaddr_in dest_addr; dest_addr.sin_addr.s_addr = inet_addr("192.168.0.100"); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(8080); addr_family = AF_INET; ip_protocol = IPPROTO_IP; inet_ntoa_r(dest_addr.sin_addr, addr_str, sizeof(addr_str) - 1); int sock = socket(addr_family, SOCK_STREAM, ip_protocol); if (sock < 0) { ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); break; } ESP_LOGI(TAG, "Socket created"); int err = connect(sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); if (err != 0) { ESP_LOGE(TAG, "Socket unable to connect: errno %d", errno); break; } ESP_LOGI(TAG, "Successfully connected"); char *msg = "Hello, Server!"; int err_send = send(sock, msg, strlen(msg), 0); if (err_send < 0) { ESP_LOGE(TAG, "Error occurred during sending: errno %d", errno); break; } ESP_LOGI(TAG, "Message sent"); char rx_buffer[128]; int len = recv(sock, rx_buffer, sizeof(rx_buffer) - 1, 0); if (len < 0) { ESP_LOGE(TAG, "Error occurred during receiving: errno %d", errno); break; } rx_buffer[len] = '\0'; ESP_LOGI(TAG, "Received %d bytes: %s", len, rx_buffer); close(sock); ESP_LOGI(TAG, "Socket closed"); vTaskDelay(2000 / portTICK_PERIOD_MS); } vTaskDelete(NULL); } void app_main() { ESP_ERROR_CHECK(nvs_flash_init()); ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_start()); xTaskCreate(tcp_client_task, "tcp_client", 4096, NULL, 5, NULL); } ``` 以上示例代码创建了一个TCP socket连接,连接到IP地址为192.168.0.100的服务器的端口8080。它首先创建一个socket,然后连接到服务器,发送一条消息并接收服务器的响应。最后关闭socket。 请注意,这只是一个简单的示例,你可以根据自己的需求进行更多的调整和扩展。你还可以使用相应的API来实现UDP socket通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值