我試圖構建一個簡單的Python Websocket服務器。我設法做握手和所有的東西。但是,我無法弄清楚如何解碼從瀏覽器接收到的消息,這是服務器接收的原始輸出:'xÙõKþ°pãüCY
。我該如何解碼?解碼通過websocket發送的數據
回答
WebSocket協議涉及framing protocol。瀏覽器不只是發送原始應用程序字節到服務器(反之亦然)。您需要解析組幀協議以提取原始字節。
已經實現了許多庫來爲您解析。你應該嘗試使用其中之一。一個這樣的圖書館是http://pypi.python.org/pypi/txWS/0.6.1,但如果你沒有找到合適的,你可以找到其他一些搜索。
您從客戶端發送的信息是什麼?你確定你使用的是Chrome 8(這是7版本過時)。如果您實際上使用最近的Chrome,那麼您的問題可能是您未能揭示有效負載。在最新版本的協議(HyBi系列)中的所有客戶端到服務器數據使用4字節的運行XOR掩碼來保護破碎的中間商免遭惡意的Javascript劫持。
請參閱section 5.3 of the spec瞭解客戶端到服務器淨荷的描述。
另外,請注意有效負載數據是UTF-8編碼的(在舊協議中也是如此),您不能將其視爲ASCII字符串。
該消息是一個簡單的「Hello World!」我的意思是Websocket版本是8(瀏覽器在握手> Sec-WebSocket-Version:8時發送這個消息)。至於取消屏蔽有效載荷,它是否在所有版本中以相同的方式工作? –
然後是的,你需要揭開有效載荷。有效載荷的前四個字節是掩碼。這些需要與以下有效載荷流進行XOR。自推出以來,屏蔽格式一直沒有變化。 – kanaka
- 1. 通過websocket或WebRTC的數據通道發送字符?
- 2. WebSocket不發送數據
- 3. 我怎樣才能發送二進制數據通過websocket safari5
- 4. 通過gevent websocket發送二進制數據
- 5. 是否可以通過WebSocket握手發送自定義數據?
- 6. 如何通過一個牛仔websocket異步發送數據?
- 7. 如何通過ajax發送base64解碼數據到php文件
- 8. 使用javascript通過websocket發送消息
- 9. WebSocket,解碼數據幀(C++)
- 10. 通過ksoap2發送數據
- 11. 通過winform發送數據
- 12. 通過ADB發送數據
- 13. 通過JSON發送數據
- 14. 發送數據通過jQuery
- 15. 通過WCF發送數據
- 16. 通過塊發送數據
- 17. 通過TCP發送數據
- 18. 發送配置數據的WebSocket
- 19. 通過請求頭髮送數據與通過請求主體發送數據
- 20. 通過推送通知發送超過256字節的數據
- 21. 通過語音通話發送數據
- 22. 我可以通過Python中的龍捲風websocket發送gzip壓縮數據嗎?
- 23. Websocket VB服務器大數據發送
- 24. node.js websocket發送自定義數據
- 25. 如何通過Websocket發送500 * 500二維Int數組?
- 26. 通過PIC16F877A的UART發送10bit數據
- 27. 錯誤的數據發送通過Ajax
- 28. 通過jQuery的ajax數據不發送
- 29. 通過JSON發送和解碼對象數組
- 30. 無法通過websocket將數據從服務器發送到客戶端
你自己實現了websocket協議還是你使用了許多現有的庫之一(哪一個)?瀏覽器和服務器之間實際上正在使用websocket協議的多個版本中的哪一個?你能包括一個最小的例子嗎? –
我用chrome測試它,它似乎是版本8.我沒有使用任何websocket庫,只是'默認'套接字庫。 –
請看看這個答案,它的作品完美http://stackoverflow.com/a/9778823/1193863 – naren