<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.sockets.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'sockets.examples.php',
    1 => 'Esempi',
    2 => 'Esempi',
  ),
  'up' => 
  array (
    0 => 'book.sockets.php',
    1 => 'Sockets',
  ),
  'prev' => 
  array (
    0 => 'sockets.constants.php',
    1 => 'Costanti predefinite',
  ),
  'next' => 
  array (
    0 => 'sockets.errors.php',
    1 => 'Socket Errors',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'reference/sockets/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="sockets.examples" class="chapter">
 <h1 class="title">Esempi</h1>

 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Example #1 Socket example: Simple TCP/IP server</strong></p>
   <div class="example-contents"><p>
    This example shows a simple talkback server. Change the
    <var class="varname">address</var> and <var class="varname">port</var> variables
    to suit your setup and execute. You may then connect to the
    server with a command similar to: <strong class="command">telnet 192.168.1.53
    10000</strong> (where the address and port match your
    setup). Anything you type will then be output on the server
    side, and echoed back to you. To disconnect, enter &#039;quit&#039;.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">#!/usr/local/bin/php -q<br /><span style="color: #0000BB">&lt;?php<br />error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Allow the script to hang around waiting for connections. */<br /></span><span style="color: #0000BB">set_time_limit</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Turn on implicit output flushing so we see what we're getting<br /> * as it comes in. */<br /></span><span style="color: #0000BB">ob_implicit_flush</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$address </span><span style="color: #007700">= </span><span style="color: #DD0000">'192.168.1.53'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$port </span><span style="color: #007700">= </span><span style="color: #0000BB">10000</span><span style="color: #007700">;<br /><br />if ((</span><span style="color: #0000BB">$sock </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_create</span><span style="color: #007700">(</span><span style="color: #0000BB">AF_INET</span><span style="color: #007700">, </span><span style="color: #0000BB">SOCK_STREAM</span><span style="color: #007700">, </span><span style="color: #0000BB">SOL_TCP</span><span style="color: #007700">)) === </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"socket_create() failed: reason: " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br />if (</span><span style="color: #0000BB">socket_bind</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">, </span><span style="color: #0000BB">$address</span><span style="color: #007700">, </span><span style="color: #0000BB">$port</span><span style="color: #007700">) === </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"socket_bind() failed: reason: " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">)) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br />if (</span><span style="color: #0000BB">socket_listen</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">, </span><span style="color: #0000BB">5</span><span style="color: #007700">) === </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"socket_listen() failed: reason: " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">)) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br />do {<br />    if ((</span><span style="color: #0000BB">$msgsock </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_accept</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">)) === </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">"socket_accept() failed: reason: " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">)) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />        break;<br />    }<br />    </span><span style="color: #FF8000">/* Send instructions. */<br />    </span><span style="color: #0000BB">$msg </span><span style="color: #007700">= </span><span style="color: #DD0000">"\nWelcome to the PHP Test Server. \n" </span><span style="color: #007700">.<br />        </span><span style="color: #DD0000">"To quit, type 'quit'. To shut down the server type 'shutdown'.\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">socket_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$msgsock</span><span style="color: #007700">, </span><span style="color: #0000BB">$msg</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$msg</span><span style="color: #007700">));<br /><br />    do {<br />        if (</span><span style="color: #0000BB">false </span><span style="color: #007700">=== (</span><span style="color: #0000BB">$buf </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$msgsock</span><span style="color: #007700">, </span><span style="color: #0000BB">2048</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_NORMAL_READ</span><span style="color: #007700">))) {<br />            echo </span><span style="color: #DD0000">"socket_read() failed: reason: " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">(</span><span style="color: #0000BB">$msgsock</span><span style="color: #007700">)) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />            break </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />        }<br />        if (!</span><span style="color: #0000BB">$buf </span><span style="color: #007700">= </span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">$buf</span><span style="color: #007700">)) {<br />            continue;<br />        }<br />        if (</span><span style="color: #0000BB">$buf </span><span style="color: #007700">== </span><span style="color: #DD0000">'quit'</span><span style="color: #007700">) {<br />            break;<br />        }<br />        if (</span><span style="color: #0000BB">$buf </span><span style="color: #007700">== </span><span style="color: #DD0000">'shutdown'</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$msgsock</span><span style="color: #007700">);<br />            break </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />        }<br />        </span><span style="color: #0000BB">$talkback </span><span style="color: #007700">= </span><span style="color: #DD0000">"PHP: You said '</span><span style="color: #0000BB">$buf</span><span style="color: #DD0000">'.\n"</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">socket_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$msgsock</span><span style="color: #007700">, </span><span style="color: #0000BB">$talkback</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$talkback</span><span style="color: #007700">));<br />        echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$buf</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    } while (</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$msgsock</span><span style="color: #007700">);<br />} while (</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$sock</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Example #2 Socket example: Simple TCP/IP client</strong></p>
   <div class="example-contents"><p>
    This example shows a simple, one-shot HTTP client. It simply
    connects to a page, submits a HEAD request, echoes the reply,
    and exits.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"&lt;h2&gt;TCP/IP Connection&lt;/h2&gt;\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Get the port for the WWW service. */<br /></span><span style="color: #0000BB">$service_port </span><span style="color: #007700">= </span><span style="color: #0000BB">getservbyname</span><span style="color: #007700">(</span><span style="color: #DD0000">'www'</span><span style="color: #007700">, </span><span style="color: #DD0000">'tcp'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Get the IP address for the target host. */<br /></span><span style="color: #0000BB">$address </span><span style="color: #007700">= </span><span style="color: #0000BB">gethostbyname</span><span style="color: #007700">(</span><span style="color: #DD0000">'www.example.com'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Create a TCP/IP socket. */<br /></span><span style="color: #0000BB">$socket </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_create</span><span style="color: #007700">(</span><span style="color: #0000BB">AF_INET</span><span style="color: #007700">, </span><span style="color: #0000BB">SOCK_STREAM</span><span style="color: #007700">, </span><span style="color: #0000BB">SOL_TCP</span><span style="color: #007700">);<br />if (</span><span style="color: #0000BB">$socket </span><span style="color: #007700">=== </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"socket_create() failed: reason: " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} else {<br />    echo </span><span style="color: #DD0000">"OK.\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #DD0000">"Attempting to connect to '</span><span style="color: #0000BB">$address</span><span style="color: #DD0000">' on port '</span><span style="color: #0000BB">$service_port</span><span style="color: #DD0000">'..."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_connect</span><span style="color: #007700">(</span><span style="color: #0000BB">$socket</span><span style="color: #007700">, </span><span style="color: #0000BB">$address</span><span style="color: #007700">, </span><span style="color: #0000BB">$service_port</span><span style="color: #007700">);<br />if (</span><span style="color: #0000BB">$result </span><span style="color: #007700">=== </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"socket_connect() failed.\nReason: (</span><span style="color: #0000BB">$result</span><span style="color: #DD0000">) " </span><span style="color: #007700">. </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">(</span><span style="color: #0000BB">$socket</span><span style="color: #007700">)) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} else {<br />    echo </span><span style="color: #DD0000">"OK.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$in </span><span style="color: #007700">= </span><span style="color: #DD0000">"HEAD / HTTP/1.1\r\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$in </span><span style="color: #007700">.= </span><span style="color: #DD0000">"Host: www.example.com\r\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$in </span><span style="color: #007700">.= </span><span style="color: #DD0000">"Connection: Close\r\n\r\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$out </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Sending HTTP HEAD request..."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">socket_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$socket</span><span style="color: #007700">, </span><span style="color: #0000BB">$in</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$in</span><span style="color: #007700">));<br />echo </span><span style="color: #DD0000">"OK.\n"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"Reading response:\n\n"</span><span style="color: #007700">;<br />while (</span><span style="color: #0000BB">$out </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$socket</span><span style="color: #007700">, </span><span style="color: #0000BB">2048</span><span style="color: #007700">)) {<br />    echo </span><span style="color: #0000BB">$out</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #DD0000">"Closing socket..."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$socket</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"OK.\n\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
</div>
<?php manual_footer($setup); ?>