我正在使用socket.io将CC3000连接到node.js服务器https://github.com/chadstachowicz/socket_io_arduino_cc3000
在SocketIOClient.cpp中,它创建一个TCP连接,获取一个会话id(sid)。它断开连接并创建另一个TCP连接,并使用sid将连接升级到websocket。为此,客户端(此处为CC3000)发送以下标头信息:
client.print(F("GET /socket.io/1/websocket/"));
client.print(sid);
client.println(F(" HTTP/1.1"));
client.print(F("Host: "));
client.println(hostname);
client.println(F("Origin: ArduinoSocketIOClient"));
client.println(F("Upgrade: WebSocket")); // must be camelcase ?!
client.println(F("Connection: Upgradern"));
在该请求之后,客户端等待来自服务器的HTTP 101响应。但是服务器没有发送任何响应。它记录为警告"websocket连接无效"并结束连接。
创建websocket的协议是否正确,或者标头中是否缺少任何信息?
此外,我想知道"起源"的价值应该是什么?在第一次握手中,它是"Arduino",而在第二次握手中它是"AlduinoSocketOClient"。
您缺少Sec-WebSocket-Key
和Sec-WebSocket-Version
标头,这是WebSocket协议握手的关键部分。
这就是实际握手的样子:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com