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

    Come utilizzare un socket?

    Salve, ho problemi con un socket:
    Codice PHP:
     <?
    /*
    AF_INET6     Protocolli basati su IPv6. TCP ed UDP sono i protocolli più comuni di questa famiglia. Il supporto a questa famiglia è stato aggiunto in PHP 5.0.0. 
    SOCK_STREAM     Fornisce una connessione sequenziale, affidabile e full-duplex. Può essere supportato un meccanismo di trasmissione fuori-banda. Il protocollo TCP è basato su questo tipo di socket. 
    rivedere sock_stream
    tcp     Il Transmission Control Protocol è un procotollo affidabile, basato sulla connessione, orientato al flusso, full duplex. Il TCP garantisce che tutti i pacchetti siano ricevuti nel medesimo ordine in cui siano stati inviati. Se un pacchetto viene perso durante la trasmissione, il TCP provvederà automaticamente alla ritrasmissione fino a quando l'host remoto non conferma la ricezione dello stesso. Per ragioni di affidabilità e di prestazioni, è il TCP stesso a decidere l'appropriata dimensione dei pacchetti del sottostante livello di datagrammi. Pertanto le applicazioni TCP devono permettere la parziale ritrasmissione di un record. 
    tcp soluzione migliore, NON SI CAPISCONO ATTRIUBIT, PIU' COMUNE SOL_
    */
    $socket  socket_create(AF_INET6SOCK_STREAMSOL_TCP); 
    //socket connect và dopo socket create: "socket_connect ( resource $socket , string $indirizzo [, int $porta ] )"
    $indirizzo='127.0.0.1';
    $porta='1999';

    /*
    socket_bind da usare prima di socket_connect,
    la funzione socket_bind() esegue il bind del nome passato in indirizzo sul socket indicato da socket.
    */
    $sourceips['marco']    = '127.0.0.1';
    // bind degli indirizzi, non ho capito se serve veramente
    socket_bind($socket$sourceips['marco']);
    /*connessione socket*/
    socket_connect ($socket$indirizzo$porta)
    /*
    occorre dare un valore al socket
     socket_listen() è disponibile solo per i socket di tipo SOCK_STREAM o SOCK_SEQPACKET. ---- socket_listen — Attende una richiesta di connessione su un socket
    $mess= contenuto del socket(messaggio) -- lenght=lunghezza massima del socket inviato, in questo caso sarà di 31 caratteri.
     */
    $mess='questo è il messaggio';
    $lengthstrlen($mess);
    $invia socket_write($socket$mess$length);
    ?>
    In pratica non capisco due cose:
    1)è stato inviato veramente oppure devo usare uan funzione tipo send?;
    2)come lo riprendo per usarlo su un'altra pagina?;
    Spiego meglio: questa è pagina A.php, dovrebbe inviarlo in pagina B.php che a sua volta lo stampa in pagina A.php. Come posso risolvere?

    p.s. Ho scritto quello che ho fatto passo passo, per farvi controllare se ho sbagliato qualcosa.

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    T'avevo detto di là di essere più circoscritto, dubito che così qualcuno ti risponderà. Provo a farlo io al posto tuo:

    "Come faccio a far sì che la pagina write.php invii una una stringa a un socket e che immediatamente dopo la pagina stream.php &ndash; che è una pagina "text/event-stream" che tramite ciclo infinito [while (1)] resta sempre aperta &ndash; scateni un'evento stampando il messaggio ricevuto?"

    Puntiamo a codice vaniglia. Dimenticatevi di quella chat.
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  3. #3
    Mi viene un dubbio: il socket si invia da solo?
    Ovvero dopo averlo creato e spedito devo avere un'altra pagina aperta in cui ricreare il socket, la connessione al socket e il blind, aggiungendo alla fine al posto di write il comando read o receive?

  4. #4
    Proviamo così:
    Codice PHP:
    $data "HEAD /HTTP/1.0 \r\n\r\n";
    $dat "rr \r\n"//18
    $response socket_write($sock$datstrlen($dat));

    while(
    socket_read($sock$response2048)){//response da dove lo piglia? non esiste d nessuna parte in nessun esempio
    print $response;
    }

    socket_close($sock); 
    In origine era $data, adesso l'ho cambiato con $dat per fare delle prove.
    Vorrei che stampasse "rr", invece mi ritrovo con numeri che si ripetono: 191919... 77777.... 99999..., la sequenza numerica dipende dal sito cui punta il socket.
    In questo caso l'ho indirizzato su google e stampa a video 777777.....
    Il valore di ciò che viene stmpato dipende da $datao $dat, sulle guide ho trovato scritto che basta mettere'$dat = "ciao";' per avere la stampa su socket write, ma non funziona, la sintassi corretta dovrebbe essere:
    Codice PHP:
    socket_write($socket$messaggio$lunghezza_messaggio
    ,
    ma non funziona.
    Qualcuno conosce la soluzione?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.