在php中回显二进制数据以便Java代码

时间:2015-04-14 10:42:30

标签: java php binary

我想从文件中读取二进制数据并将其发送到远程Java App。 正如我发现here: 我可以这样(我的代码的一部分):

else
{
    $fp = fopen("binary file","rb");
    $vector="";
    while (!feof($fp)) {
        // Read the file, in chunks of 16 byte
        $data = fread($fp,16);
        $arr = unpack("C*",$data);
        foreach ($arr as $key => $value) {
            $vector.=" ".$value;
        }
        $vector.="\n";
    }
}

我发送一些标题

header("Content-Type: multipart/related; boundary=bounary----I don't know if boundary value is private".$eol);
    header("MIME-Version: 1.0".$eol);
    header("Connection: Keep-Alive".$eol);
    header("Accept-Encoding: gzip, deflate".$eol);
    header("Host: host".$eol.$eol);
    header("Content-Type: multipart/related; boundary=bounary----I don't know if boundary value is private".$eol);
    header("Content-Type: multipart/related; boundary=bounary----I don't know if boundary value is private".$eol);

然后我这样打印出来:

echo "--".$BOUNDARY.$eol;
echo "Content-Type: application/octet-stream".$eol;
echo "Content-Length: ".strlen($vector).$eol;
echo "Content-Transfer-Encoding: binary".$eol;
echo $eol.$vector.$eol;
echo "--".$BOUNDARY."--".$eol;

我在Advanced Rest Client Application中测试它并查看二进制数据:

0 0 0 72 0 54 0 55 0 97 0 56 0 51 0 49
 0 101 0 56 0 45 0 53 0 102 0 48 0 56 0 45
 0 52 0 100 0 49 0 99 0 45 0 97 0 57 0 57
 0 52 0 45 0 101 0 101 0 53 0 97 0 51 0 52
 0 49 0 52 0 50 0 54 0 57 0 51 0 0 0 1
 0 0 0 0 4 0 0 1 0 0 0 0 1 0 0 0...

但Java编码器说有一个空字符串而不是二进制数据?如何以正确的方式回显这个二进制数据?什么可能导致这个问题?

更新:我们发现,无论我设置什么Content-Length标头,他都会在他的应用中收到标题:Content-Length:475 但是在Advanced Rest Client中我看到了content-length的值。那么它可能会导致问题。它可能是由某种原因引起的吗?

1 个答案:

答案 0 :(得分:0)

此行中的2 $eol可能导致后续标头无法发送:

header("Host: host".$eol.$eol);

尝试将其更改为1,或者实际上我怀疑您甚至需要在发送到header()的字符串中使用EOL字符。