我想从文件中读取二进制数据并将其发送到远程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的值。那么它可能会导致问题。它可能是由某种原因引起的吗?
答案 0 :(得分:0)
此行中的2 $eol
可能导致后续标头无法发送:
header("Host: host".$eol.$eol);
尝试将其更改为1,或者实际上我怀疑您甚至需要在发送到header()的字符串中使用EOL字符。