Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Problemi con ciclo while in una chat+socket

    Salve, tempo fà avevo aperto su questo forum un tread riguardante questo argomento, le risposte ricevute sono state esaurienti e trovando la soluzione avevo anche l'avevo anche postata, ecco qui nel caso vogliate vederla: http://forum.html.it/forum/showthrea...4&pagenumber=3 .
    Tuttavia è sorto un problema nell'applicazione della stessa su un'altro sito web, di cui non m avvalgo del supporto del db per stampare ogni volta i messaggi.
    Codice PHP:
    $messaggio 'prova: ciao';
    do{
        
    $socket socket_create(AF_INETSOCK_STREAMSOL_TCP) or die("Impossibile creare il socket\n");
        
    socket_connect($socket$host$port) or die("Impossibile collegarsi al server\n");
        
    socket_write($socket$messaggiostrlen($messaggio)) or die("Impossibile inviare il messaggio al server\n");//con questo mando il messaggio stampato sul socket, in modo da farlo vedere a tutte le pagine in cui è presente la chat
        
    $leggi socket_read ($socket1024) or die("Impossibile leggere la risposta di ritorno dalla pagina server\n");
        
    $messaggio $leggi;
        echo 
    $messaggio;
        
    socket_close($socket);//a differenza della pagian server.php qui possiamo chiudere il socket, poichè abbimo già trattato i valori e stampato i risultati
        
    }while(1); 
    Ho optato per un ciclo do-while, in quanto vorrei reuperare i valori stampati in precedenza all'apertura della pagina e aggiornarla all'occorrenza.
    Il problema è questo: non riesco a dire al server che deve eseguire il ciclo o continuare a eseguirlo solo quando il socket ha un valore reale, e quindi è effettivamente un messaggio.
    Preciso che un socket vuoto, come in questo caso non è mai vuoto, se stampate un socekt vuoto avrete: ' ', ovvero lascia lo spazio, quindi il valore "strlen($socket) == '1'" è sempre vero se è vuoto.

    Dopo questa spiegazione ecco l'obbiettivo che vorrei raggiungere: attivare il ciclo while solo se il socket ha un valore diverso dallo spazio vuoto. Spero qualcuno mi possa essere d'aiuto.

  2. #2
    Ho pensato di modificarlo con una funzione, ma ho un problemino:
    Codice PHP:
    function prova(){
    $host    "localhost";
    $port    porta;
    $messaggio ='ciao'
    $socket socket_create(AF_INETSOCK_STREAMSOL_TCP) or die("Impossibile creare il socket\n");
    socket_connect($socket$host$port) or die("Impossibile collegarsi al server\n");
    socket_write($socket$messaggiostrlen($messaggio)) or die("Impossibile inviare il messaggio al server\n");
    $leggi socket_read ($socket1024) or die("Impossibile leggere la risposta di ritorno dalla pagina server\n");
    $messaggio $leggi;
    echo 
    $messaggio;
    socket_close($socket);
    //adesso per evitare il loop qui dentro posso usare: continue - break - exit o die, i più indicati sarebbero break e continue, ma danno lo stesso effetto di exit o die
    }

    while(
    1){
        
    prova();
    }
    echo 
    'fine'
    In questo modo pensavo di raggiungere l'effetto ma mi sbagliavo, perchè non arriva mai a stampare 'fine', potrei anche passarci su se continuasse il ciclo, ma si blocca.
    Preciso che la pagina deve per forza interrompere la funzione, altrimenti non mi stampa nulla, rimangono sempre con la pagina bianca, invece se interrompo la funzione stampa, ma solo una volta.
    Potrei provare ad abbandonare il ciclo while per un ciclo for infinito?
    Al di là del risultato che posso raggiungere dove stò sbagliando? Il concetto mi sembra quello.


    P.S. Ripreciso che i problemi sono 2: o va in loop, o stampa un solo risultato ad ogni refresh della pagina, e a causa delle istruzioni necessarie per non farlo andare in loop(continue, break, ecc->provate tutte tranne die, perchè sò che ferma la pagina) esce dal ciclo while, e quindi anche da un ipotetico ciclo for...
    Ultima modifica di deleted_193; 05-10-2013 a 02:02

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.