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
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
Shyson AUTO_INCREMENT non si aggiorna MySQL 2
Shyson Codice wp-login non funziona PHP 2
S WORDPRESS NON FA INSTALLARE PIU NULLA WordPress 9
Shyson Non mi fa accedere al sito WordPress 12
N Non Autorizzato. Dovresti rimuovere il parametro customize_messenger_channel per visualizzare l'anteprima in frontend. WordPress 1
R INSERT INTO tabella non funziona Classic ASP 2
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
felino Conversione da MPG a MP4: audio non sincronizzato Windows e Software 1
F Telecamere Wi-Fi non si connettono A nvr IP Cam e Videosorveglianza 0
G Finestra di dialogo che non si apre - programma NUENDO Windows e Software 0
L php mysql non salva solo id PHP 21
D Pagina non trovata Wordpress WordPress 7
S connesso, internet non disponibile ( con extebder tp-link850) Reti LAN e Wireless 0
F Script java elenco alfabetico non funziona Javascript 3
F Script non funzionante. Devo elencare in ordine alfabetico un elenco di nominativi, ma lo script non Javascript 2
L Estrazione dati casuali non doppioni MySQL 1
napuleone non si chiude il thead e non si apre il tbody Javascript 0
napuleone non si aggiorna textarea in tempo reale Javascript 3
D Modem Asus non trasmette ogni 3/4 giorni Reti LAN e Wireless 2
M non static method cannot be referenced from a static context Java 1
napuleone Con le date il codice da di matto o forse non è così Javascript 6
M Questa pagina non carica correttamente Google Maps: aiuto!! HTML e CSS 1
M "Internet non disponibile" Reti LAN e Wireless 0
L Non vedo pc in rete Reti LAN e Wireless 0
M Numero random non ripetitivo Java 2
G pc desktop non si connette all'hotspot wifi Reti LAN e Wireless 0
L Non riesco a riprodurre uno sfondo Photoshop 0
N Server mysql non raggiungibile da connessione esterna MySQL 1
R Select concatenata che non funziona la seconda volta Ajax 3

Discussioni simili