使用CC3000和socket.io创建websocket时,服务器不发送HTTP 101响应

时间:2014-04-14 10:06:58

标签: websocket socket.io arduino websocket++

我使用socket.io将CC3000连接到node.js服务器。我使用以下库来创建websocket https://github.com/chadstachowicz/socket_io_arduino_cc3000

在SocketIOClient.cpp中,它创建一个TCP连接,获取一个session-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: Upgrade\r\n"));

在此请求之后,客户端等待来自服务器的HTTP 101响应。但是服务器没有发送任何响应。它记录为“ websocket connection invalid ”警告并结束连接。

创建websocket的协议是否正常或标题中是否有任何遗漏信息?

另外,我想知道'Origin'的价值应该是多少?在第一次握手期间,它是“Arduino”,而在第二次握手中,它是“ArduinoSocketIOClient”。

1 个答案:

答案 0 :(得分:0)

您遗漏了Sec-WebSocket-KeySec-WebSocket-Version标题,这是WebSocket protocol handshake的关键部分。

这是实际握手的外观:

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