我有一个简单的服务器,通过端口上的tcp传输二进制数据(0和1)
我想使用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位的字节。但我不知道如何做到这一点 谢谢你的帮助。
答案 0 :(得分: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
}