You might not know this, but PHP comes with a very capable socketprogramming API. These socket functions now include almost everything youwould need for socket-based client-server communication over TCP/IP, andcan be easily deployed to build simple network applications. Find out more,inside.
You can also write a server that allows for more than just one transaction at a time. Consider the following variant of the first example:
// don't timeout
// set some variables
$host = "192.168.1.99";
$port = 1234;
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket
echo "Waiting for connections...\n";
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming
echo "Received connection request\n";
// write a welcome message to the client
$welcome = "Roll up, roll up, to the greatest show on earth!\n? ";
socket_write($spawn, $welcome, strlen ($welcome)) or die("Could not send
// keep looping and looking for client input
// read client input
$input = socket_read($spawn, 1024, 1) or die("Could not read input\n");
if (trim($input) != "")
echo "Received input: $input\n";
// if client requests session end
if (trim($input) == "END")
// close the child socket
// break out of loop
// reverse client input and send back
$output = strrev($input) . "\n";
socket_write($spawn, $output . "? ", strlen (($output)+2)) or die("Could
not write output\n");
echo "Sent output: " . trim($output) . "\n";
} while (true);
// close primary socket
echo "Socket terminated\n";
This is almost exactly the same code as that used in the very
first example, with the obvious addition of debug messages and a "do-while" loop which allows the server to keep reading new data transmitted by the client, and responding to it. The loop is terminated when the client sends the special session terminator string "END".
Here's the output of a sample session:
$ telnet 192.168.1.99 1234
Connected to medusa.
Escape character is '^]'.
Roll up, roll up, to the greatest show on earth!
? Look Ma...all backwards
sdrawkcab lla...aM kooL
? jack frost
Connection closed by foreign host.
And here are the corresponding debug messages generated on
$ /usr/local/bin/php -q server.php
Waiting for connections...
Received connection request
Received input: Look Ma...all backwards
Sent output: sdrawkcab lla...aM kooL
Received input: jack frost
Sent output: tsorf kcaj
Received input: END