使用PHP连接到侦听netcat

使用PHP连接到侦听netcat,php,eof,netcat,Php,Eof,Netcat,我有一个netcat服务器,从命令行运行: netcat -l -q0 -p 9999 -c "tesseract stdin stdout -l spa" 我可以使用netcat客户端连接到此服务器: cat /tmp/autogenerado.jpg | netcat 127.0.0.1 9999 所以,我向另一台服务器发送一个jpeg文件,并在客户端接收OCR’ed数据 我想用PHP实现这一点: $fp = fsockopen("tcp://127.0.0.1:9999", $errn

我有一个netcat服务器,从命令行运行:

netcat -l -q0 -p 9999 -c "tesseract stdin stdout -l spa"
我可以使用netcat客户端连接到此服务器:

cat /tmp/autogenerado.jpg | netcat 127.0.0.1 9999
所以,我向另一台服务器发送一个jpeg文件,并在客户端接收OCR’ed数据

我想用PHP实现这一点:

$fp = fsockopen("tcp://127.0.0.1:9999", $errno, $errstr); 

if (!$fp) {
    echo "{$errno}: {$errstr}\n";
    die();
}

fwrite($fp, $jpeg);

$contents = stream_get_contents($fp);

fclose($fp);

return $contents;
但是脚本挂起在
stream\u get\u contents
上。我认为这是因为netcat服务器不知道PHP客户端何时完成了数据发送


是否可以发送EOF?

您需要关闭套接字进行写入,如下所示:

<?php
$stream = stream_socket_client("tcp://whatever:9999", $errno, $errstr);

if (!$stream) {
    echo "{$errno}: {$errstr}\n";
    die();
}

fwrite($stream, $jpeg);

stream_socket_shutdown($stream, STREAM_SHUT_WR); /* This is the important line */

$contents = stream_get_contents($stream);

fclose($stream);

return $contents;
?>

作为参考,最终工作代码为:

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($sock, "10.187.252.35", 9999);
socket_send($sock,$bdata,strlen($bdata),MSG_EOR):
socket_shutdown ($sock,1);
while ($out = socket_read($sock, 2048)) {
    echo $out;
}
socket_close($sock);

您从写入中得到的返回值是多少?你有什么错误吗?这也可以帮助您: