高手來,關於php中socket的有關問題

來源:互聯網
上載者:User
高手來,關於php中socket的問題!
一個硬體往伺服器連接埠上發送資料(抓包軟得到的是正確的16進位),通過抓包軟體抓取的資料是正常的(16進位),然而通過php的socket接受到的資料(通過轉換後也是16進位,未轉換是亂碼),下面貼上代碼,請高手幫忙看下哪裡錯了。為什麼php的socket擷取的資料和抓包軟體擷取的不一樣

通過抓包軟體擷取的正確代碼是(16進位的):FA 01 01 FF AA 03 00 01 00 0B 00 00 00 A3
通過php socket獲得的資料(通過dechex(),ord()轉換後的,和軟體抓取的不一樣,是錯誤的):fa 7 25 2 fa 2 0 9 f6 4 2c 88 fa 1

下面貼上php的socket代碼:
PHP code
= $MAX_USERS)                {                    $reject = "Server full. Try again later.\n";                                   }                                //將當前用戶端串連放如socket_select選擇                $connections[$i] = $newconn;                //輸入的串連資源緩衝容器                $writefds[$i] = $newconn;                               //串連不正常                if ($reject)                {                                      $close[$i] = true;                }                else                {                    echo "Welcome to the PHP Chat Server!\n";                                  }                               //初始化當前串連讀取內容的緩衝容器                $input[$i] = "";                continue;            }            //用戶端串連            $i = (int)$rfd;            //讀取            $tmp = @socket_read($rfd, 14, PHP_NORMAL_READ);            if (!$tmp)            {                //讀取不到內容                              print "connection closed on socket $i\n";                close($i);                continue;            }            $input[$i] .= $tmp;            $tmp = substr($input[$i], -1);            /*if ($tmp != "\r" && $tmp != "\n")            {                // no end of line, more data coming                continue;            }*/            $line = trim($input[$i]);            $input[$i] = "";            echo 'Client >>'.$line."\r\n";                                                $data=str_split($line);  print_r($data); echo "\r\n";                        //$data = explode("\t",$line);            //$data=str_split($data);            foreach($data as $v){             echo dechex(ord($v))."\t";                          }             echo "\r\n";                                                            socket_getpeername($connections[$i],&$remoteIP,&$remotePort);echo $remoteIP."\r\n";echo $remotePort."\r\n";//$data=str_split($buffer);//print_r($data);$str="\xFA\x01\x01\xFF\xAA\xAA\x00\x01\x00\x00\x00\x00\x00\x01"; socket_send($connections[$i],$str,strlen($str),0);                                                                                }        foreach ($writefds as $wfd)        {            $i = (int)$wfd;            $w = socket_write($wfd, "hello");        }    }   }function close($i){    global $connections, $input, $close;    socket_shutdown($connections[$i]);    socket_close($connections[$i]);    unset($connections[$i]);    unset($input[$i]);       unset($close[$i]);}?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.