1. 程式人生 > >Could not decode a text frame as UTF-8 的解決

Could not decode a text frame as UTF-8 的解決

我準備用谷歌的protobuf作為前後端通訊的協議。


但是從伺服器傳送Message物件到web的時候爆了這個錯。很奇怪是什麼意思,我明明發的是二進位制資料啊,何來的text。。。。

我想起來我在伺服器端使用的websocket庫是從Github上抄來的,而Github上給出的例子就是傳送文字,但是去庫的原始碼裡找了一圈沒發現有什麼地方定義資料格式的啊

又去網上找了一下websocket的一些介紹,發現一張圖


websocket的訊息是分片傳送的,每一片的開頭定義了基本的資訊。如這張圖顯示的。第0位0或1表示是不是連續分片的最後一片,123位必須是0,4567四位是一個16進位制數字。這個數字是0代表附加資料,1代表文字,2代表二進位制資料。

原來就是這4位定義了資料格式。。。

回去看socket庫的原始碼,它在開頭寫入了一個數字“129”。這個數字轉成二進位制後“10000001”,果然和網上說的一樣。趕緊改成130(10000002),從新試了一下


不報錯了,破費!

以前都是直接和c++的後端通訊的,想發什麼資料直接發了,在包頭寫好長度,然後在迴圈裡面去讀socket收到的資料。Websocket省事的地方就是格式和長度之類的他都幫你弄好了,收到的直接就是整塊的資料,省事也是挺省事的,不過還得折騰一番