<?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);
?>