c - 在嵌入式系统上使用 gsm 模块实现 WebSocket 客户端

标签 c websocket embedded gsm

我有一个带有 gsm 模块的嵌入式设备(Quectel M95F)。我可以使用模块的 AT 命令集创建套接字连接并使用 HTTP Rest API。现在我正在尝试实现一个 WebSocket 客户端应用程序,但我找不到可以在没有 SSL 的情况下工作的测试服务器。

WebSocket.org 有一个 echo 服务,它与浏览器配合良好,但如果没有 SSL 则无法连接到它。这是该示例的页面: http://www.websocket.org/echo.html

我什至无法在我的 GSM 模块上使用 GET 方法发出握手请求。当我尝试使其与此类模块一起工作时,是否需要了解任何提示?我只找到了一个 Arduino 库,但它离我的系统太远了。我尝试查看浏览器上发送和接收的回显服务器的数据包。然后我尝试使用 POSTMAN 发送握手数据包,但总是收到错误请求错误。

最佳答案

ws://echo.websocket.org 无需 SSL 即可工作,这是我的示例页面:

<!DOCTYPE html>
<meta charset="utf-8" />
<title>WebSocket Test</title>

<script>
var wsServ = "ws://echo.websocket.org";

function initWebSockets()
{
    websocket = new WebSocket(wsServ);
}
 
window.addEventListener("load", initWebSockets, false);
</script>

这是服务器响应:

HTTP/1.1 101 Web Socket Protocol Handshake
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type, authorization, x-websocket-extensions, x-websocket-version, x-websocket-protocol
Access-Control-Allow-Origin: null
Connection: Upgrade
Date: Tue, 18 Jul 2017 22:06:46 GMT
Sec-WebSocket-Accept: qn0lFK1Dg0wZ4esiqXliCDB2lTg=
Server: Kaazing Gateway
Upgrade: websocket

这也是我的请求 header :

GET / HTTP/1.1
Host: echo.websocket.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Sec-WebSocket-Version: 13
Origin: null
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Key: av25rwzrdCw9qTswx7bmTA==
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

出于安全原因,WebSocket 协议(protocol)规范 ( RFC 6455 ) 建议严格执行握手(HTTP 流量)格式,如果您将流量与建议的类型进行比较,效果会更好。

关于c - 在嵌入式系统上使用 gsm 模块实现 WebSocket 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43541172/

相关文章:

c - 从 struct addrinfo 中提取十六进制 IP

c++ - PCC-F-02102,在 AIX 5.3 中进行 C 预处理时出现 fatal error

javascript - 尝试使用 Websocket 和 Express 服务器发布产品表

linux - 为什么从 https 服务器下载文件在带有 montavista linux 的嵌入式设备上不起作用?

matlab - 您能解释一下这个嵌入式 MATLAB 函数错误吗?

c - 来自访问宏的硬件寄存器的地址

使用 fgets 而不是 fgetc 复制文件?

python-3.x - 是否有服务器 Python 3 websocket 模块?

.net - Windows 7 Websocket PlatformNotSupportedException

linux - 嵌入式 Linux 单核低延迟进程