国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關于WEBSOKET協(xié)議的數(shù)據(jù)解析的疑問

HappyLiu

最近看了一一個PHP SOCKET服務端代碼,對于其中對SOKET協(xié)議的數(shù)據(jù)解析部分看不明白,就是以下代碼中的uncode方法;希望知道的牛人解答下,謝謝!附件中有相關客戶端和服務端代碼!

function uncode($str,$key){
        $mask = array();  
        $data = '';
        $msg = unpack('H*',$str);
        // print_r($msg); echo "\r\n";
        $head = substr($msg,0,2);  
        if ($head == '81' && !isset($this->slen)) {  
            $len=substr($msg,2,2);
            $len=hexdec($len);
            if(substr($msg,2,2)=='fe'){
                $len=substr($msg,4,4);
                $len=hexdec($len);
                $msg=substr($msg,4);
            }else if(substr($msg,2,2)=='ff'){
                $len=substr($msg,4,16);
                $len=hexdec($len);
                $msg=substr($msg,16);
            }
            $mask[] = hexdec(substr($msg,4,2));  
            $mask[] = hexdec(substr($msg,6,2));  
            $mask[] = hexdec(substr($msg,8,2));  
            $mask[] = hexdec(substr($msg,10,2));
            $s = 12;
            $n=0;
        }else if($this->slen > 0){
            $len=$this->slen;
            $mask=$this->ar;
            $n=$this->n;
            $s = 0;
        }

        $e = strlen($msg)-2;
        for ($i=$s; $i<= $e; $i+= 2) {  
            $data .= chr($mask^hexdec(substr($msg,$i,2)));  
            $n++;  
        }  
        $dlen=strlen($data);

        if($len > 255 && $len > $dlen+intval($this->sjen)){
            $this->ar=$mask;
            $this->slen=$len;
            $this->sjen=$dlen+intval($this->sjen);
            $this->sda=$this->sda.$data;
            $this->n=$n;
            return false;
        }else{
            unset($this->ar,$this->slen,$this->sjen,$this->n);
            $data=$this->sda.$data;
            unset($this->sda);
            return $data;
        }

    }
6286 2 0
2個回答

walkor 打賞

看樣子這個協(xié)議不是websocket的協(xié)議,
沒有必要去完全理解別人的協(xié)議,有時只有協(xié)議的制定者才能知道如果解析這個協(xié)議。

首先這個協(xié)議是用16進制明文傳遞的
使用$msg = unpack('H*',$str); 轉換成了原始請求數(shù)據(jù)
首部兩個字節(jié)是head,存儲的應該是一個short int型數(shù)字,第三到第四字節(jié)也是一個short int,存儲的是包長,下面的如果包長為ff或者fe分別有不同的解法....

  • HappyLiu 2014-08-28

    再問一個問題,html5默認的websocket是用16進制的ACSII碼發(fā)送數(shù)據(jù)的嗎?

  • walkor 2014-08-28

    不是吧

HappyLiu

哦,好的,我再看下,多謝!

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??