Websocket ATMEL SAM4E的lws客户端

Websocket ATMEL SAM4E的lws客户端,websocket,freertos,libwebsockets,tclws,Websocket,Freertos,Libwebsockets,Tclws,我已经为atmel sam4e生成了libwebsockets.a(lib,includes) 我需要帮助为atmel SAM4E运行一个简单的libwebsockets客户端。 我在esp32上犯了这个错误。但是我已经为atmel编译了我的LibWebSocket 在src/main.c:25中包含的文件中: ./lws/include/libwebsockets.h:266:29:致命错误:mbedtls/esp_config.h:没有这样的文件或目录 266 |#define MBEDTL

我已经为atmel sam4e生成了libwebsockets.a(lib,includes) 我需要帮助为atmel SAM4E运行一个简单的libwebsockets客户端。 我在esp32上犯了这个错误。但是我已经为atmel编译了我的LibWebSocket

在src/main.c:25中包含的文件中: ./lws/include/libwebsockets.h:266:29:致命错误:mbedtls/esp_config.h:没有这样的文件或目录
266 |#define MBEDTLS_CONFIG_FILE

在我深入解释下一步应该做什么之前,让我先描述一下WebSocket是如何实际工作的以及您当前的位置

要建立WebSocket连接,首先需要使用HTTP与服务器“对话”,因为WebSocket的工作方式是向服务器发送一个HTTP请求,说“让我们使用WebSocket进行对话”,此时服务器响应为“好,让我们切换协议”,只有在这一点上才可以开始使用WebSocket发送数据。更进一步说,HTTP连接是通过TCP或TLS连接建立的,这取决于您是需要单向认证还是双向认证和数据加密。因此,在访问HTTP部分之前,您需要让TCP或TLS(本质上是“扩展的”TCP)工作

假设您已经完成了上面的所有工作,并且已经与服务器建立了工作WebSocket连接——实际上,仅使用原始WebSocket而不使用任何内容来交换聊天数据可能会非常乏味。当然,如果你计划只交换原始聊天信息,那没关系。然而,一旦额外的需求开始堆积起来——比如:让我们发送消息时间戳、发送者名称、图片支持、文件支持等——快速扩展会让人非常恼火,因为本质上,您必须开始开发通过WebSocket发送的自己的协议。原因是:简单的原始WebSocket只提供了“服务器发送给您X个字节,它们就在这里”。没有键值头、“消息体”部分或任何类似的概念,只有原始数据传输机制。此外,根据您的服务器使用的技术堆栈类型(或者如果您是服务器后端的开发人员,您计划自己使用),使其使用原始WebSocket可能更难,而不是在其上运行的东西。为了给你我的经验,就我个人而言,我推荐一些类似于跺脚协议的东西。它非常简单,甚至可以在一两天内实现它的基本机制,但它给了您更多的灵活性

为了总结以上所有内容,以下是您未来的“大图”:

现在(最后)从下往上看你现在的处境以及下一步应该做什么:

您提到您已使用某种调制解调器成功连接到GSM网络。我假设您仅使用AT命令“连接到网络”/BTS,但尚未建立数据连接-以访问“我有TCP工作”部分。在这里,您可以选择两条路径:

  • 使用调制解调器的AT命令打开、发送和接收TCP数据。有些调制解调器有一个集成的TCP/IP协议栈,并且有类似于上述的AT命令。好处:如果你的目标是“把它做完”,那么速度会更快。缺点:有些调制解调器不提供这种功能,命令有时可能不像您所期望的那样与普通的套接字API相比,调制解调器之间可能存在差异(如果您决定在某个时候更改您的调制解调器),您无法控制任何“魔力”这种情况发生在调制解调器的TCP/IP协议栈中,考虑到这方面的错误并不像人们最初想象的那样罕见——这可能会让人恼火
  • 使用PPP并将调制解调器与微控制器上运行的TCP/IP堆栈集成。我对如何将调制解调器与TCP/IP协议栈集成作了更广泛的解释
  • 完成上述任一步骤后,您应该能够与服务器建立TCP(或TLS,如果您决定沿着该路径)连接。一旦建立连接以访问WebSocket部分,就需要发送HTTP请求——因此需要HTTP客户端。同样有两种可能的路径:要么获取由某人编写的、可以在您有限的微控制器资源上运行的HTTP客户端,要么自己编写一个——至少能够发送一个非常简单的HTTP get请求。这并不像听起来那么可怕。要请求服务器切换到WebSocket,请求如下所示:

    GET /chat HTTP/1.1
    Host: server.example.com
    Connection: Upgrade
    Upgrade: websocket
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13
    Origin: http://example.com
    

    一旦服务器响应,您就应该有一个工作的WebSocket连接,在这个连接上您可以实现(或准备好实现)WebSocket协议,并且可能会在上面运行您自己的协议。

    在我深入解释下一步应该做什么之前,先做一个总结,首先让我描述一下WebSocket是如何实际工作的,以及您目前的位置

    要建立WebSocket连接,首先需要使用HTTP与服务器“对话”,因为WebSocket的工作方式是向服务器发送一个HTTP请求,说“让我们使用WebSocket进行对话”,此时服务器响应为“好,让我们切换协议”,只有在这一点上才可以开始使用WebSocket发送数据。更进一步说,HTTP连接是通过TCP或TLS连接建立的,这取决于您是需要单向认证还是双向认证和数据加密。因此,在访问HTTP部分之前,您需要让TCP或TLS(本质上是“扩展的”TCP)工作

    假设您已经完成了上面的所有工作,并且已经与服务器建立了工作WebSocket连接——实际上,仅使用原始WebSocket而不使用任何内容来交换聊天数据可能会非常乏味。当然,如果你计划只交换原始聊天信息,那没关系。然而,一旦额外的需求开始堆积起来——比如:让