2015-06-19 96 views
0

我在我的服務器上用C++進行了websocket通信。我有一個websocket協議的問題。當我以文本格式獲得握手消息時,我進行握手響應並以文本格式發回並打開連接,但是當我向瀏覽器發回第二條消息時,連接失敗。 但是,如果我在第一條消息的框架中握手回答,以後一切正常,我沒有其他消息的問題。握手後的Websocket消息

Mozzila firefox:連接到ws:// localhost /在加載頁面時被中斷。 谷歌瀏覽器:與'ws:// localhost /'的WebSocket連接失敗:服務器不能屏蔽它發送給客戶端的任何幀。

我不掩飾任何框架。

這適用於Mozzila firefox和谷歌瀏覽器,但不適用於Safari瀏覽器。 那麼,有誰知道問題是什麼?有沒有人有這個問題?

感謝

回答

0

你說你是不是掩蓋任何幀(從服務器到客戶端),在您發回的數據,請檢查第二個字節的第一位。

根據RFC6445發送數據到客戶端時,第二個字節(掩碼標誌)的第一位必須設置爲0。如果你的框架設置不正確,該位設置爲1,瀏覽器會抱怨「服務器不能屏蔽它發送給客戶端的任何幀」

此外,這可能與你無關,但檢查在升級/握手部分代碼中沒有任何結尾數據時,在Web套接字上工作時,後續chr(0)(空字符)在我嘗試發送客戶數據。