高手來,關於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]);}?>