2013-12-19 3 views
0

У меня есть простой сервер, который передает двоичные данные (0 и 1) через tcp на порт.
Я хочу использовать 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 
} 
Смежные вопросы