Non capisco se invio il socket

PHP

Utente Attivo
9 Mag 2013
105
0
16
Non capisco se i socket vengono effettivamente inviati, volevo capirne il funzionamento e dopo aver letto qualche guida ho voluto vedere un esempio, ma se l'esempio non funziona non posso capirne ulteriornmente il funzionamento.
Questo esempio era su un sito in italiano (uno dei pochi esempi online sui sockets comprensibili, almeno per me):
PHP:
<?php
//SERVER.PHP

$sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //crea un socket

if(!socket_bind($sock, "127.0.0.1", 443)) //crea un socket sulla porta 1999 localmente

    return; //se non è stato possibile eseguire il binding della riga precedente, termina

socket_listen($sock, 2); //altrimenti, si mette in attesa

while(1) //ciclo infinito: 1 è sempre vero

{

    print ("Connected, now reading...\n"); //scrive “connecte, now ready” e va a capo

    $canale = socket_accept($sock); //accetta la connessione sul socket aperto

    $x = socket_read($canale, 1024, PHP_NORMAL_READ); //legge i dati fino al carattere “\n”

    $dim=strlen($x); //scrive dentro la var dim la lunghezza della stringa passata

    $validCommand=substr($x, 0, $dim-1); //estrae il comando eliminando i caratteri “\n”

    echo "ho ricevuto la stringa: ".$validCommand."\n"; //da conferma  a video della stringa ricevuta

    switch ($validCommand) //analizza la stringa ricevuta

    {

        case "ciao":  //se la stringa vale “ciao”

           echo "ciao a te!\n"; //scrive “ciao a te!” e va a capo

        break;

        case "come stai": //se la stringa vale “come stai”

           echo "bene grazie\n"; //scrive “bene grazie” e va a capo

        break;

        case "exit": // se la stringa vale “exit”

            return; //termina l'applicazione

        break;

        default: //per tutti gli altri valori della stringa non contemplati nelle righe precedenti

        echo "comando sconosciuto!...\n"; //scrive “comando sconosciuto!...” e va a capo

        break;

    }

}
?>

PHP:
<?php
//CLIENT.PHP

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //crea un socket

socket_connect($sock, "127.0.0.1", 443); //si connette in locale sulla porta 1999

$stringa="ciao"; // setta una variabile stringa contenente “ciao”

echo "invio la stringa ".$stringa."\n"; //scrive  che invierà la stringa

socket_write($sock, "$stringa\n"); // invia i dati all'altro programma tramite socket aggiungendo un accapo
?>

I titoli delle pagine sono scritti dopo l'aperura del php e vanno scritti in minuscolo.
Il mio problema è semplicemente che la pagina non fà niente...
Per favore potreste provare ad usarli, ovviamente cambiate la porta per il socket.
Fatemi sapere!!:fonzie:
 

giamma

Utente Attivo
4 Mag 2005
111
0
0
PHP:
<?php 
//SERVER.PHP 

$sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //crea un socket 

if(!socket_bind($sock, "127.0.0.1", 443)) //crea un socket sulla porta 1999 localmente 

    return; //se non è stato possibile eseguire il binding della riga precedente, termina 

socket_listen($sock, 2); //altrimenti, si mette in attesa 

while(1) //ciclo infinito: 1 è sempre vero 

{ 

    print ("Connected, now reading...\n"); //scrive “connecte, now ready” e va a capo 

    $canale = socket_accept($sock); //accetta la connessione sul socket aperto 

    $x = socket_read($canale, 1024, PHP_NORMAL_READ); //legge i dati fino al carattere “\n” 

    $dim=strlen($x); //scrive dentro la var dim la lunghezza della stringa passata 

    $validCommand=substr($x, 0, $dim-1); //estrae il comando eliminando i caratteri “\n” 

    echo "ho ricevuto la stringa: ".$validCommand."\n"; //da conferma  a video della stringa ricevuta 

    switch ($validCommand) //analizza la stringa ricevuta 

    { 

        case "ciao":  //se la stringa vale “ciao” 

           echo "ciao a te!\n"; //scrive “ciao a te!” e va a capo 

        break; 

        case "come stai": //se la stringa vale “come stai” 

           echo "bene grazie\n"; //scrive “bene grazie” e va a capo 

        break; 

        case "exit": // se la stringa vale “exit” 

            return; //termina l'applicazione 

        break; 

        default: //per tutti gli altri valori della stringa non contemplati nelle righe precedenti 

        echo "comando sconosciuto!...\n"; //scrive “comando sconosciuto!...” e va a capo 

        break; 

    } 

} 
?>

socket_bind($sock, "127.0.0.1", 443) qui non crea un bind alla porta 1999 ma semmai alla porta 443 poi non capisco che senso abbia mettere la condizione se diverso da. In oltra un ciclo infinito non e molto sensato normalmente poi stai utilizzando tutti indirizzi ip locali quindi crei un socket che si connette con se stesso e neanche qui ci vedo molto senso in oltre utilizza un il termine chiave return per teminare una funzione non ho mai sentito una cosa simile penso che non sia un ottimo esempio questo... se ne trovi di meglio postali e fammi sapere ciao
 

PHP

Utente Attivo
9 Mag 2013
105
0
16
In realtà mi interessava solo capirne il funzionamento base, comunque hai ragione. Un problema aggiuntivo è che richiamare la pagina server.php direttamente la fà ciclare all'infinito (credo sia colpa dell'impostazione del ciclo while), inoltre anche se funzionasse teoricamente non potresti personalizzare niente, visto che passa un valore fisso di una variabile al sockets.
Per come è struttturato mi ha ricordato un ipotetico form di registrazione, ad esempio se non metti l'email potrebbe far tornare indietro la frase "inserisci l'email", inutile spreco di codice per una cosa così banale.
Ho cambiato la porta in 433 perchè apache in localhost sul mio computer non accetta la 1999 ma la 433, ecco gli errori della pagina client con la porta 1999:
Codice:
Warning: socket_connect(): unable to connect [0]: Impossibile stabilire la connessione. Rifiuto persistente del computer di destinazione.
invio la stringa ciao
Warning: socket_write(): unable to write to socket [0]: Socket non connesso e indirizzo non fornito durante l'invio su un socket di datagramma che utilizza una chiamata sendto. Richiesta di invio o ricezione di dati annullata.
Comunque cercherò un esempio più valido su internet, questo non era propio il massimo.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Drag and Drop non capisco le sequenze... Javascript 1
Valerio93 [PHP] non capisco come mai mi da la data NULL PHP 3
trattorino [Javascript] ho comprato questo plugin ma non capisco come installarlo Javascript 1
J [Javascript] una funzione ricorsiva che non capisco come lavori Javascript 6
otto9due Errore ricorsivo jquery, non capisco da cosa dipenda.. jQuery 1
A anomalia che non capisco... PHP 1
otto9due Problema if elseif o foreach.. o non capisco cosa non funzioni.. PHP 4
O Non capisco cosa non funzioni.. :( Ajax 0
E Non capisco... PHP 1
playmo le animazioni con jQuery RoyalSlider dentro WP a FireFox non piacciono, non capisco WordPress 0
D LEFT JOIN... non ci capisco nulla PHP 2
E non capisco il Backtracking Java 0
L Penalizzata... ma non capisco perchè! SEO e Posizionamento 4
V Script per distanza indirizzi [era: Script Php che non capisco se funzioni !] PHP 2
P non capisco la procedura Javascript 0
I Salve,devo fare un database,ma non ci capisco MySQL 0
B recupero valore campo file ( proprio non capisco ) PHP 0
Y non capisco come sistemare... Flash 0
giorgione_tg dicitura privacy... non ci capisco nulla... Leggi, Normative e Fisco 0
giorgione_tg librerie GD non capisco.. PHP 2
D non capisco perche non funzia questi script PHP 1
M Errore che non capisco... PHP 3
felino Mac OS e Client Mail: Stato non in linea Mac e Software 1
I nome utente non esiste nel database PHP 1
L Suggerimento Pagespeed per non vedenti HTML e CSS 0
F comando di inclusione file audio in I-Pad non funziona HTML e CSS 1
M Immagini non usate WordPress 0
B Non riesco a trovare i cognomi con i caratteri speciali in Access (Microsoft 365) MS Access 0
G Numero zero null non deve visualizzare nulla PHP 0
F Paypal _xclick IPN non risponde PHP 1
R Variabile non risconosciuta dentro una funzione PHP 1
C ACCESS Aprire maschera se valore non presente in una combo MS Access 7
E Alert non viene mostrato PHP 1
felino Hardisk WD SATA 1TB 3.5" non si avvia! Hardware 4
K Scrip non funzionante Javascript 1
R jquery che cambia css di un elemento non mi funziona sulla pagina caricata da ajax Ajax 5
zorro CREATE TABLE non funziona PHP 6
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
Sevenjeak Php8 non carica estenzioni PHP 0
R query DELETE non cancella i record PHP 1
otto9due Input text: accetta solo numeri e non può essere vuoto. Javascript 9
G Non vedo frecce su forme Photoshop 2
G Il mio sito dopo aver abilitato l'ssl non visualizza le immagini con indirizzi senza ssl HTML e CSS 0
P jquery refresh div non funziona Javascript 0
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
S Certificato SSL non funzionante Domini 0
zorro modulo di registrazione: funziona ma non sempre PHP 2
D Form contatti non funzionante HTML e CSS 0
MarcoGrazia Trovare record nel database partendo da id non sequenziali PHP 6
M Non ho rinnovato il mio sito su Aruba... Domini 1

Discussioni simili