2013-12-19 99 views
0

我有一個簡單的服務器,通過端口上的TCP流二進制數據(0和1)。
我想使用php並讀取二進制數據(位),將其存儲在一個字符串中,並將其顯示在瀏覽器中,然後按照我的方式進行解碼。
我不想讀取整個TCP數據包的頭部,只是數據包中的數據。閱讀二進制數據與PHP通過TCP發送

這是我設法在這段時間生成的代碼,當它在瀏覽器中運行時,它成功連接到服務器並且服務器發送數據。收到的數據,但顯示在一些奇怪的俄羅斯信件。

<?php 
// host and port to connect to 
$host = "127.0.0.1"; 
$port = 1991; 

// connect to the port 
$fp = fsockopen($host, $port, $errno, $errstr); 

// don't die 
set_time_limit(0); 

// if connection not successfull, display error 
if (!$fp) 
{ 
    die("Error: Could not open socket for connection!"); 
} 
else 
{ 
    // connection successfull, listen for data (1024 bytes by default) 
    $got = fgets($fp); 

    // display the data 
    echo $got; 
} 

fclose($fp); 

?> 
<br><br><br><br> 
Server closed; 

我想在字符串中顯示接收到的位。爲了進一步解碼,我需要8位的字節。但我不知道如何做到這一點。
謝謝你的幫助。

回答

1

其實你不需要解析TCP頭,因爲PHP會爲你做。用fgets()你將只獲得有效載荷。該有效載荷由一個或多個字節組成。

爲了從該有效負載的每個字節獲得每一位,您必須使用bitwise operators

我建議你使用socket_read()代替fgets(),這是不可靠的二進制數據:

$got = socket_read($fp, 1024); 

$got包含您的所有字節,你可以用這種循環的獲得:

for ($i = 0; $i < strlen($got); ++$i) 
{ 
    echo $got[$i]; // print one byte 
}