- 论坛徽章:
- 0
|
本帖最后由 fiendcly 于 2012-08-21 07:12 编辑
Dears :
前言 -
各位大大安安 !!
SORRY 我來自台灣 用語如果 有不同的地方請多包含 ....
目前手上有個專案
有個功能是利用 SOCKET 將 資料 壓縮並且 送給其它 平台或環境做整合 及 P2P 等....
會採用 POCO 主要是 這個專案有用到 :
https://github.com/OpenRTMFP/Cumulus/wiki/_pages
剛好跟我目前要寫的東西很類似 , 所以我就用 POCO 當元件庫 寫這個專案看看...
可是一接到 PHP 上就有問題了.....
目前的測試結果是
PHP inflate , deflate => FLASH As3 inflate ,deflate ... << 正常 >>
C++ POCO inflate , deflate => PHP , FLAS AS3 inflate , deflaet <<錯誤>>
使用 C++ POCO libary
http://pocoproject.org/
#################################
測試 -
測試環境 :
作業系統 - Centos6.2 64
伺服器 - HP DL380 Gen8 , CPU XEON E52620
以下是我用 POCO 寫的 CODE :
Deflate :- std::string Zlib::deflate (const std::string &source , int level = (-1)) {
- std::istringstream in(source);
- std::ostringstream out;
- Poco::DeflatingOutputStream deflaterOut(out,DeflatingStreamBuf::STREAM_ZLIB,level);
- // 這裡沒有使用 POCO 的 StreamCopier::copyStream 的原因是因為 , 沒法子 COPY 可能是 BUG.....
- // POCO SUPPORT 是要收費 的 , 如果知道原因的也麻煩賜教 , 謝謝!!!!
- // 寫到這裡時要小心....
- // 在不得已的情況下 ,,,, 直接用這個方式 :
- deflaterOut << in.str() ;
- deflaterOut.close() ;
- deflateStr = out.str();
- return deflateStr ;
- }
复制代码 Inflate :- std::string Zlib::inflate (const std::string &source) {
- std::istringstream in(source);
- std::ostringstream out;
- Poco::InflatingInputStream inflaterIn(in);
- StreamCopier::copyStream(inflaterIn , out);
- inflateStr = out.str();
- return inflateStr ;
- }
复制代码 PHP 就簡單多了 :- gzDeflate($string,level = (defalut -1));
- gzInflate($string);
复制代码
測試結果分析 : - SOURCE JSON STring :
- {"SID":"123456789","BID":"LD0001","DATA":{"args":{"name":"test1","passwd":"test1","item":["itme1","itme2","itme3","itme4"]}}}
- POCO Deflate :
- x▒▒V
- ▒#U▒R2426153▒▒T▒Qr▒▒▒.▒!▒JV▒J▒E▒▒ :/17(_▒Z\▒.H,..OA▒,I▒U▒▒ҹ▒~n▒▒6▒▒&J▒▒▒▒
- Lengh :
- 97
- Ascii Code :
- 120 156 171 86 10 246 116 81 178 82 50 52 50 54 49 53 51 183 176 84 210 81 114 2 139 248 184 24 24 24 24 2 185 46 142 33 142 74 86 213 74 137 69 233 197 32 58 47 49 55 21 40 95 146 90 92 2 146 46 72 44 46 46 79 65 18 200 44 73 205 85 178 138 6 210 185 169 16 126 110 170 17 148 54 134 210 38 74 177 181 181 181 0 13 213 35 85
- Hex Code :
- 78 9c ab 56 a f6 74 51 b2 52 32 34 32 36 31 35 33 b7 b0 54 d2 51 72 2 8b f8 b8 18 18 18 18 2 b9 2e 8e 21 8e 4a 56 d5 4a 89 45 e9 c5 20 3a 2f 31 37 15 28 5f 92 5a 5c 2 92 2e 48 2c 2e 2e 4f 41 12 c8 2c 49 cd 55 b2 8a 6 d2 b9 a9 10 7e 6e aa 11 94 36 86 d2 26 4a b1 b5 b5 b5 0 d d5 23 55
- PHP Deflate:
- ▒V
- ▒tQ▒R2426153▒▒T▒Qr▒▒▒.▒!▒JV▒J▒E▒▒ :/17(_▒Z\▒.H,..OA▒,I▒U▒▒ҹ▒~n▒▒6▒▒&J▒▒▒▒
- Lengh :
- 91
- Ascii Code :
- 171 86 10 246 116 81 178 82 50 52 50 54 49 53 51 183 176 84 210 81 114 2 139 248 184 24 24 24 24 2 185 46 142 33 142 74 86 213 74 137 69 233 197 32 58 47 49 55 21 40 95 146 90 92 2 146 46 72 44 46 46 79 65 18 200 44 73 205 85 178 138 6 210 185 169 16 126 110 170 17 148 54 134 210 38 74 177 181 181 181 0
- Hex Code :
- ab 56 a f6 74 51 b2 52 32 34 32 36 31 35 33 b7 b0 54 d2 51 72 2 8b f8 b8 18 18 18 18 2 b9 2e 8e 21 8e 4a 56 d5 4a 89 45 e9 c5 20 3a 2f 31 37 15 28 5f 92 5a 5c 2 92 2e 48 2c 2e 2e 4f 41 12 c8 2c 49 cd 55 b2 8a 6 d2 b9 a9 10 7e 6e aa 11 94 36 86 d2 26 4a b1 b5 b5 b5 0
复制代码 用 HEX 表來分析 :
POCO 在解壓縮和壓縮時 .
必需在
前面 : 多二個字元 , 78 9c
後面 : 多了四個字元 , d d5 23 55
所以造成它跟 PHP 還有 FLASH 無法做 解壓縮和壓縮的動作.
有經驗的人可以分析一下狀況給在下聽嗎...
目前我暫時是硬改 前後的字元讓雙方可以溝通.
|
|