Socket Programming with PHP

Open a socket, print a message, close one pipe, and read the response.

$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
    socket_connect($socket,$host,$port);
    $originalMessageLength = strlen($message);
    $message = 'REPORT SPAMC/1.2' . chr(13) . chr(10) . 'Content-length: ' . $originalMessageLength . chr(13) . chr(10) . chr(13) . chr(10) . $message;
    $status = socket_sendto($socket,$message, strlen($message), MSG_EOF, $host, $port);
    if ($status == -1)
    {
        $error = socket_strerror(socket_last_error());
        throw new Exception(__FUNCTION__ .' - Unable to connect to spamd on '. $host . ':' . $port . '.  The error message: ' . $error);
    }
    $message = '';
    while ($status = socket_read($socket,4096))
    {
        $message .= $status;
    }

Simple server

<?
$host = "192.168.1.99";
$port = 1234;

// don't timeout!
set_time_limit(0);

// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

// accept incoming connections and spawn another socket to handle communication
while(true)
{
    $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");

    $input = socket_read($spawn, 1024) or die("Could not read input\n");
    $input = trim($input);

    // reverse client input and send back
    $output = strrev($input) . "\n";
    socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");

    socket_close($spawn);
}
socket_close($socket);
?>

Note: we must run the program with -q which tells PHP to suppress the "Content-Type: text/html" header.

Sample client using fsockopen

$host="192.168.1.99";
$port = 1234;

// open a client connection
$fp = fsockopen ($host, $port, $errno, $errstr);

if (!$fp)
{
    $result = "Error: could not open socket connection";
}
else
{
    fgets ($fp, 1024);
    fputs ($fp, $message);
    $result .= fgets ($fp, 1024);
    fclose ($fp);
}

Sample client

$host="192.168.1.99";
    $port = 1234;

    // create socket
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create
socket\n");

    // connect to server
    $result = socket_connect($socket, $host, $port) or die("Could not connect
to server\n");

    socket_read ($socket, 1024) or die("Could not read server response\n");

    // send string to server
    socket_write($socket, $message, strlen($message)) or die("Could not send
data to server\n");

    // get server response
    $result = socket_read ($socket, 1024) or die("Could not read server
response\n");

    // end session
    socket_write($socket, "END", 3) or die("Could not end session\n");

    // close socket
    socket_close($socket);

    // clean up result
    $result = trim($result);
    $result = substr($result, 0, strlen($result)-1);
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License