• User Attivo

    [php/c++/java] dialogare autonomamente col client

    salve,
    sto cercando il modo di inviare dati ad una pagina php ma ho 1 vincolo:

    il client non deve inviare alcuna richiesta http,
    ergo non posso:

    • refreshare la pagina
    • cambiare pagina
    • usare ajax et similia.

    in pratica la pagina "dovrebbe" cambiare automaticamente sotto "input" che parte direttamente dal server. .
    Il problema è: come faccio a far partire 'sto benedetto input?
    E come faccio a farlo arrivare solo ed esclusivamente a quell'utente?

    pensavo a qualche applicazione in c++/java in alternativa a php. oppure cosa??


  • User Attivo

    Potresti usare le socket o una classe che le usa... ad esempio con la classe Snoopy e questo codice:

    [php]$snoopy = new Snoopy();

    // Valori da inviare
    $form[$input_name] = $input_value;

    $snoopy->submit('http://www.sito.it/submit.php', $form);[/php]

    Fai una richiesta POST alla pagina "http://www.sito.it/submit.php".


  • User Attivo

    ok ok m'informo sulle Socket e vedo cosa si può fare 🙂


  • User Attivo

    ho girato un po' in rete, ma non ci ho capito molto. hai qualche guida/link/dritta da consigliarmi su:

    • cos'è una socket?
    • come funziona in php (ho guardato sul manuale, ma non ci ho capito troppo..)

  • User Attivo

    Una richiesta HTTP POST (tipo quando invii un form con method post) è una cosa del genere:

    POST /login.php HTTP/1.1
    Host: www.host.it
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Content-Length: 1245
    
    var1=valore1&var2=valore2
    ```GET invece:
    
    

    GET /login.php?var1=valore1&var2=valore2 HTTP/1.1
    Host: www.host.it
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8

    
    Per fare la stessa cosa che farebbe un browser, ma lato server e con PHP, si può fare così:
    
    [php]// Apertura connessione a www.host.it usando la porta 80
    $con = fsockopen ( 'www.host.it', 80);
    // Invio richiesta
    fwrite($con, 'POST /login.php HTTP/1.1
    Host: www.host.it
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Content-Length: 1245
    
    var1=valore1&var2=valore2');[/php]Se ti interessa il risultato... continua sul manuale :D
    
    Una cosa, ogni linea deve terminare con "\r\n". Tra header e body ci deve essere un ulteriore \r\n...
    
    Content-Length: dovrebbe contenere il peso del body, quindi: [php]strlen('var1=valore1&var2=valore2')[/php]Comunque con una classe è più semplice:
    
    [php] $snoopy = new Snoopy();
    
    // Valori da inviare
    $form['var1'] = 'valore1';
    $form['var2'] = 'valore2';
    
    // Invio POST
    $snoopy->submit('http://www.sito.it/submit.php', $form);
    
    // Invio GET
    $snoopy->fetch('http://www.sito.it/submit.php?var1=valore1&var2=valore2');
    // Risultato
    echo $snoopy->results;[/php]Puoi usare anche la libreria CURL... ma più o meno la "solfa" è sempre questa.

  • User Attivo

    Grazie mille FRA_T 🙂

    solo 1 ultima info - come posso inviare questi dati esclusivamente ad uno /due client precisi su un numero indefinito di client connessi alla stessa pagina?

    sul manuale ho trovato questo:

     ...connessione nel dominio Internet (AF_INET, usando TCP      o UDP) o Unix (AF_UNIX). Per il dominio Internet, apre      una connessione a un socket TCP verso l'      hostname sulla porta      port.  hostname può essere      in questo caso, sia un fully qualified domain name o un indirizzo IP.      Per le connessioni UDP, è necessario specificare esplicitamente il       protocollo, usando: 'udp://' come prefisso di       hostname. Per il dominio...
    

    ma nn credo faccia molto al caso mio...


  • User Attivo

    Mi ero perso la tua risposta ^_^

    Non so, il codice che ti ho postato da per scontato che il cliente richiede una pagina al server, che a sua volta esegue una richiesta ad un server e fornisce eventuali risultati al client che ha richiesto la pagina.