Ciao,

ho un dispositivo (una scheda I/O con 8 relè e 8 ingressi digitali) con a bordo una scheda di rete.

Devo creare una connessione con il dispositivo per poter leggere lo stato degli ingressi (aperto/chiuso).

Premesso che non ho capito la differenza tra fsockopen e stream_socket_client (sul manuale dice che sono simili ma la seconda ha maggiori opzioni) ho utilizzato quest'ultima in questo modo:

Codice PHP:
        // Variabili
        
$remoteSocket    "tcp://10.1.105.220:3000";
        
$timeout        30;
        
        
// Apre la connessione
        
$handle stream_socket_client($remoteSocket$errorString$errorNumber$timeout);
        
        
// Setta la connessione in non-blocking mode
        
stream_set_blocking($handle,0);
        
        if (!
is_resource($handle)) {
        
            echo 
"ERRORE: $errorString ($errorNumber)
"
;
            
//$this->view->connessione = "ERRORE: $errorString ($errorNumber)
";
        }
         
        // Connessione riuscita
        else {
        
            echo "
CONNESSIONE OK";
            
            // Stringa da inviare
           
$string = "\x01\x30\x30\x02\x59\x03\x59\x0D";
            
            // Scrive la stinga
            fwrite(
$handle$string);
            
            // Attende 200ms per essere sicuro di avere la risposta completa
            usleep(200000);
            
            // Legge la risposta
            
$response = fgets($handle);

            // Chiude la connessione
            fclose(
$handle);
            
            // Stampa la risposta
            echo var_dump(
$response);
        } 
Intanto da notare che devo settare il flusso in NON-BLOCKING mode altrimenti quando vado a leggere il risultato si blocca in attesa.
Se qualcuno mi spiega cosa significa NON-BLOCKING (ho cercato di capire cosa voglia dire e quale sia la differenza ma non mi è per niente chiaro).

A parte questo la domanda è: ora che ho la risposta (in formato esadecimale) come faccio a leggerne il contenuto?
Come va gestito una risposta in questo caso?

In pratica conosco la risposta che mi devo aspettare. Ad esempio in questo caso:

SOH 0 0 ACK bcc CR

Quello che mi serve è sapere se il risultato è ACK oppure un NAK.

Inoltre non capisco il motivo per cui se (come da esempi su PHP) faccio così:

Codice PHP:
while (!feof($handle)) {
   echo 
fgets($handle);

Per essere sicuro di leggere tutto il flusso mi si blocca in attesa.

Grazie
ciao