2016-11-08 116 views
0

我正在從服務器發送自定義web套接字框到客戶端。我設法無縫地握手,但發送正常的文本框架導致我的問題(客戶端的消息沒有收到)。這是我發送的:WebSocket服務器:發送文本框到客戶端

​​

數據發送正確(握手工作,jj的值爲6)。我根據我的代碼How can I send and receive WebSocket messages on the server side?找到了解釋。

我的客戶是很簡單,我只是張貼完成:爲什麼握手工作和普通的文本沒有按」

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Web Socket Example</title> 
    <meta charset="UTF-8"> 
    <script type="text/javascript"> 

     var webSocket = new WebSocket("ws://localhost:48884/", "sample"); 
     webSocket.binaryType = "arraybuffer"; 
     webSocket.onopen = function(e) { alert("opened"); } 
     webSocket.onclose = function(e) { alert("closed"); } 
     webSocket.onerror = function(e) { alert("error"); } 
     webSocket.onmessage = function(e) { alert("got: " + e.data); } 

    </script> 
    </head> 
    <body> 
     <div id="holder" style="width:600px; height:300px"></div> 
    </body> 
</html> 

的web套接字版本我從客戶得到的是13

任何想法T'

+0

工作你使用哪種語言的服務器,你希望以什麼語言得到答案?你怎麼知道握手的工作?你到目前爲止嘗試了什麼? – Myst

+0

我想握手工作,因爲當我運行客戶端時,我得到了警報(「打開」)。 我使用C++,但這是無關緊要的。 – maxest

+0

後續行動。我只是在Internet Explorer(以前使用Firefox)上檢查過這個。在IE我打開,但然後立即出現錯誤(未定義),並關閉。 – maxest

回答

0

我解決了這個問題。它現在可以工作,因爲在握手結束時需要額外的\ r \ n(https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers)。所以我的握手是不正確的,但Firefox以某種方式接受它(但不接受消息)。

無論如何,我上面貼的鏈接說,握手格式應該是:

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: key 
empty line 

我遵守這個格式,然後這一切在Firefox和IE瀏覽器能正常工作,但並沒有在Chrome。我發現,要讓它在Chrome上工作,我還需要指定的協議:上述

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: key 
Sec-WebSocket-Protocol: my_protocol_name 
empty line 

握手格式讓我握手,服務器到瀏覽器的消息發送在Firefox,IE和Chrome

相關問題