使用 PHP 连接到侦听 netcat
Connect to listening netcat using PHP
我有一个 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 数据。
我想在 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_get_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);
我有一个 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 数据。
我想在 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_get_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);