Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Telnet server in PHP

  1. #1

    Telnet server in PHP

    Sono finalmente riuscito a scrivere questo smplicissimo codice funzionante :

    <?php
    //--------------------//
    // TEST Telnet server //
    //--------------------//


    error_reporting(E_ALL);

    //Attesa di connessione illimitata
    //--------------------------------
    set_time_limit(0);

    //Abilita lo scarico dell'output
    //------------------------------
    ob_implicit_flush();

    //Definizione indirizzo IP e porta di comunicazione
    //-------------------------------------------------
    $address = '127.0.0.1';
    $port = 23;

    //Creazione del socket
    //--------------------
    if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo "socket_create() fallito: motivo: " . socket_strerror($sock) . "\n";
    }

    //Eseguo il bind del nome
    //-----------------------
    if (($ret = socket_bind($sock, $address, $port)) < 0) {
    echo "socket_bind() fallito: motivo: " . socket_strerror($ret) . "\n";
    }

    //Metto in attesa di richieste il socket
    //--------------------------------------
    if (($ret = socket_listen($sock, 5)) < 0) {
    echo "socket_listen() fallito: motivo: " . socket_strerror($ret) . "\n";
    }

    //Loop di ricezione
    //-----------------
    do {
    if (($msgsock = socket_accept($sock)) < 0) {
    echo "socket_accept() fallito: motivo: " . socket_strerror ($msgsock) . "\n";
    break;
    }
    //Preparazione del messaggio da inviare
    //-------------------------------------
    $msg = "Test Telnet Sever\r\n\r\n".
    "=================\r\n\r\n".
    "1 -> Opzione1\r\n".
    "2 -> Opzione2\r\n".
    "3 -> Opzione3\r\n".
    "4 -> Logout\r\n";

    //Invio del messaggio
    //-------------------
    socket_write($msgsock, $msg, strlen($msg));

    //Azzeramento del buffer di ricezione
    //-----------------------------------
    $buf="";

    do {
    //Eseguo la lettura dei dati inviati dal client
    //---------------------------------------------
    if (FALSE === ($buf = socket_read($msgsock, 1,0))) {
    echo "socket_read() fallito: motivo: " . socket_strerror($ret) . "\n";
    break 2;
    }

    //Entro nel controllo soltanto se è stato premuto INVIO
    //-----------------------------------------------------
    if ($buf == chr(13))
    {
    $buf='';
    if ($talkback == '1')
    {
    socket_write($msgsock, "Opzione1", 9);
    continue;
    }
    if ($talkback == '2')
    {
    socket_write($msgsock, "Opzione2", 9);
    continue;
    }
    if ($talkback == '3')
    {
    socket_write($msgsock, "Opzione3", 9);
    continue;
    }
    if ($talkback == '4')
    {

    socket_close($msgsock);
    break 2;
    }
    //Azzero il buffer di ritorno
    //---------------------------
    $talkback="";
    }
    $talkback .= $buf;
    //Invio l'echo del carattere digitato e/o premuto al client
    //---------------------------------------------------------
    socket_write($msgsock, $buf, strlen ($talkback));

    //Visualizzo il carattere digitato dal client sul server
    //------------------------------------------------------
    echo "$buf\n";
    } while (true);
    socket_close($msgsock);
    } while (true);

    socket_close($sock);

    ?>
    Però a questo punto mi sorge un dubbio che poi altro non è che il mio problema attule.
    Come posso gestire più connessioni a questo sever contemporaneamente?
    Mi spiago meglio
    Avviato questo piccolo server, riesco a connettermi utilizzando :

    telnet 127.0.0.1

    ma se apro una nuova finestra e chiedo nuovamente la connessione al server questa mi risponde nisba, probabilmente perchè la precedente è ancora occupata.
    C'è un sistema per gestire più connessioni????

    Ringrazio in anticipo

    Leandro
    http://www.topolinux.org l'ezine italiano completamente dedicato al mondo del pinguino.

  2. #2
    tra le pillole c'è ne una mia che spiega l'argomento, o meglio c'è ne sono due:
    - una tratta nello specifico l'utilizzo dei comandi delle socket per gestire + connessioni
    - una tratta l'utilizzo di software come inetd o tcpserver per ricevere in entrata le richieste ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Ho cercat fra le pillole, ma non ho trovato.
    Forse ho guardato male ma sono arrivato fino a Gennaio 2001!!!

    Hai per caso il link diretto?
    http://www.topolinux.org l'ezine italiano completamente dedicato al mondo del pinguino.

  4. #4

  5. #5
    Che dire?
    Ho dato una letta velocissima alle 2 pillole ti faccio i miei complimenti.
    Credo proprio che mi saranno molto utili.

    Ci studierò a fondo e se puoi ti va ti faccio sapere.

    Peccato che il link al codice completo nn funzionino.

    Intanto cmq grazie.


    P.S.
    C'è chi mi hai detto che ho scelto uno dei peggiori linguaggi per fare un telnet server. :master:
    http://www.topolinux.org l'ezine italiano completamente dedicato al mondo del pinguino.

  6. #6
    Originariamente inviato da Lemoeb
    P.S.
    C'è chi mi hai detto che ho scelto uno dei peggiori linguaggi per fare un telnet server. :master:
    Bhe, diciamo che PHP ha altri scopi.

  7. #7
    Originariamente inviato da Lemoeb
    P.S.
    C'è chi mi hai detto che ho scelto uno dei peggiori linguaggi per fare un telnet server. :master:
    io c'ho fatto un server (incompleto) di direct connect

    basta organizzare e strutturare il codice nei file in modo corretto e ti assicuro che si ci può fare tutto

    del resto se lo fai in PHP non ti servono prestazioni estreme
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Se vuoi qui sono disponibili dei programmi scritti da me,
    tra cui c'è un CLIENT telnet in PHP e un SERVER telnet in JAVA. Puoi prenderne spunto...

    http://fabrizio.ciacchi.it/template.php?pagina=script

    [Homepage] [Contattami]
    Powered by: Ubuntu - Debian - Gentoo
    Developing: Java - C++ - PHP

    [supersaibal]"Perchè tanto Debian è meglio"
    [/supersaibal]

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