2015-12-02 83 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開始服務的,那麼您需要在主機屬性之後將其表示爲標頭。

我們可能會說在同伴之間發生了可能的版本不匹配,但沒有答案。所以我們有一個像代理等小隱藏的問題。