2011-12-03 90 views
3

我試圖構建一個簡單的Python Websocket服務器。我設法做握手和所有的東西。但是,我無法弄清楚如何解碼從瀏覽器接收到的消息,這是服務器接收的原始輸出:'xÙõKþ°pãüCY。我該如何解碼?解碼通過websocket發送的數據

+0

你自己實現了websocket協議還是你使用了許多現有的庫之一(哪一個)?瀏覽器和服務器之間實際上正在使用websocket協議的多個版本中的哪一個?你能包括一個最小的例子嗎? –

+0

我用chrome測試它,它似乎是版本8.我沒有使用任何websocket庫,只是'默認'套接字庫。 –

+0

請看看這個答案,它的作品完美http://stackoverflow.com/a/9778823/1193863 – naren

回答

3

WebSocket協議涉及framing protocol。瀏覽器不只是發送原始應用程序字節到服務器(反之亦然)。您需要解析組幀協議以提取原始字節。

已經實現了許多庫來爲您解析。你應該嘗試使用其中之一。一個這樣的圖書館是http://pypi.python.org/pypi/txWS/0.6.1,但如果你沒有找到合適的,你可以找到其他一些搜索。

0

您從客戶端發送的信息是什麼?你確定你使用的是Chrome 8(這是7版本過時)。如果您實際上使用最近的Chrome,那麼您的問題可能是您未能揭示有效負載。在最新版本的協議(HyBi系列)中的所有客戶端到服務器數據使用4字節的運行XOR掩碼來保護破碎的中間商免遭惡意的Javascript劫持。

請參閱section 5.3 of the spec瞭解客戶端到服務器淨荷的描述。

另外,請注意有效負載數據是UTF-8編碼的(在舊協議中也是如此),您不能將其視爲ASCII字符串。

+0

該消息是一個簡單的「Hello World!」我的意思是Websocket版本是8(瀏覽器在握手> Sec-WebSocket-Version:8時發送這個消息)。至於取消屏蔽有效載荷,它是否在所有版本中以相同的方式工作? –

+0

然後是的,你需要揭開有效載荷。有效載荷的前四個字節是掩碼。這些需要與以下有效載荷流進行XOR。自推出以來,屏蔽格式一直沒有變化。 – kanaka