Skip to content

Instantly share code, notes, and snippets.

@mageekguy
Created January 24, 2014 12:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mageekguy/8596320 to your computer and use it in GitHub Desktop.
Save mageekguy/8596320 to your computer and use it in GitHub Desktop.
Very (very) simple telnet clone written in PHP
<?php
$serverSocket = stream_socket_client('tcp://' . $argv[1] . ':' . $argv[2]);
$read = array(STDIN);
$write = $except = array();
$request = $response = '';
$run = true;
echo '> ';
while ($run === true)
{
stream_select($read, $write, $except, null);
$cWrite = $write;
$write = array();
$cRead = $read;
$read = array();
if (isset($cWrite[0]) === true)
{
$request = (string) substr($request, fwrite($serverSocket, $request));
if ($request != '')
{
$write[0] = $serverSocket;
}
else
{
$response = '';
$read[1] = $serverSocket;
}
}
switch (true)
{
case isset($cRead[0]):
$input = fread($cRead[0], 2048);
while (substr($input, - strlen(PHP_EOL)) !== PHP_EOL)
{
$input .= fread($cRead[0], 2048);
}
$input = trim($input);
$run = (strtolower($input) != 'quit');
if ($run === true)
{
$request = $input . "\r\n";
$write[0] = $serverSocket;
}
break;
case isset($cRead[1]):
$data = fread($cRead[1], 2048);
if ($data == '')
{
echo 'Connection closed!' . PHP_EOL;
$run = false;
}
else
{
$response .= $data;
if (substr($response, -2) === "\r\n")
{
echo trim($response) . PHP_EOL;
echo '> ';
$read[0] = STDIN;
}
else
{
$read[1] = $cRead[1];
}
}
break;
}
}
echo 'Bye!' . PHP_EOL;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment