2015-12-02 35 views
2

我想发送数据到ESP8266 websocket服务器,但握手不起作用。Websockets ESP8266

我送AT下面的一系列命令:

AT+RST 
AT+CWMODE=1 
AT+CIPMODE=0 
AT+CIPMUX=1 
AT+CWJAP="ssid_my_network","password" 
AT+CIPSTART=4,"TCP","ip_server",port 
AT+CIPSEND=4,data_lenght 

在这一瞬间,我送头:

GET ws:ip_server HTTP/1.1\r\n 
Host: ip_server\r\n 
Upgrade: websocket\r\n 
Connection: Upgrade\r\n 
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n 
Sec-WebSocket-Version: 13\r\n 

但是,我没有收到来自服务器的响应。我究竟做错了什么?

回答

1

HTTP标头必须以空行结束。您需要发送另一个\r\n

GET ws:ip_server HTTP/1.1\r\n 
Host: ip_server\r\n 
Upgrade: websocket\r\n 
Connection: Upgrade\r\n 
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n 
Sec-WebSocket-Version: 13\r\n 
\r\n 
+0

谢谢!但我还没有收到任何回应。我会继续尝试。 –

+0

你确定你只是用\ r来终止命令吗? – cagdas

1

我想你可以尝试使用WiFiClient代替的WebSocket(如this

一些代码从上面的链接发送HTTP GET请求:

// Perform an HTTP GET request to a remote page 
bool getPage() { 

// Attempt to make a connection to the remote server 
    if (!client.connect(http_site, http_port)) { 
    return false; 
    } 

    // Make an HTTP GET request 
    client.println("GET /index.html HTTP/1.1"); 
    client.print("Host: "); 
    client.println(http_site); 
    client.println("Connection: close"); 
    client.println(); 

    return true; 
} 
+0

这个答案与websocket有关吗? – mpromonet

1

尝试删除WS URI握手GET请求后。如果你没有路径,就把它做成“/”。另外,如果您的websocket服务器不是从80开始服务的,那么您需要在主机属性之后将其表示为标头。

我们可能会说在同伴之间发生了可能的版本不匹配,但没有答案。所以我们有一个像代理等小隐藏的问题。