2016-02-10 3 views
2

J'ai un serveur netcat, en cours d'exécution de la ligne de commande:Connectez-vous à l'écoute netcat en utilisant PHP

netcat -l -q0 -p 9999 -c "tesseract stdin stdout -l spa" 

je peux connecter à ce serveur à l'aide client netcat:

cat /tmp/autogenerado.jpg | netcat 127.0.0.1 9999 

Alors, j'envoyer un jpeg déposer sur un autre serveur et recevoir les données OCR dans le client.

Je veux faire en 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; 

Mais le script est en attente de stream_get_contents. Je pense que c'est parce que le serveur netcat ne sait pas quand le client PHP a fini d'envoyer des données.

Est-il possible d'envoyer un EOF?

+0

Quelle est la valeur de retour en êtes-vous de 'fwrite'? Avez-vous des erreurs? Cela peut aussi vous aider: http://stackoverflow.com/questions/20684777/php-stream-get-contents-hangs-at-the-end-of-the-stream –

Répondre

1

Vous devez arrêter la prise pour l'écriture, quelque chose comme ceci:

<?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; 
?> 
+0

merci @ joe-watkins, c'était la solution . –

+0

enregistré quelques heures, merci! –

0

Pour référence, le code de travail final est:

$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);