Exemples

Exemple #1 Exemple de socket : serveur TCP/IP simple

Cet exemple montre comment créer un serveur simple. Changez les variables address et port pour vous adapter à votre configuration, et exécutez-le. Vous pourrez alors vous connecter au serveur avec une commande comme ceci : telnet 192.168.1.53 10000 (en supposant que l'adresse et le port correspondent à votre configuration). Tout ce que vous saisissez après cela sera envoyé au serveur, et affiché en retour. Pour vous déconnecter, tapez 'quit'.

#!/usr/local/bin/php -q
<?php
error_reporting
(E_ALL);

/* Autorise l'exécution infinie du script, en attente de connexion. */
set_time_limit(0);

/* Active le vidage implicite des buffers de sortie, pour que nous
 * puissions voir ce que nous lisons au fur et à mesure. */
ob_implicit_flush();

$address '192.168.1.53';
$port 10000;

if ((
$sock socket_create(AF_INETSOCK_STREAMSOL_TCP)) === false) {
    echo 
"socket_create() a échoué : raison : " socket_strerror(socket_last_error()) . "\n";
}

if (
socket_bind($sock$address$port) === false) {
    echo 
"socket_bind() a échoué : raison : " socket_strerror(socket_last_error($sock)) . "\n";
}

if (
socket_listen($sock5) === false) {
    echo 
"socket_listen() a échoué : raison : " socket_strerror(socket_last_error($sock)) . "\n";
}

do {
    if ((
$msgsock socket_accept($sock)) === false) {
        echo 
"socket_accept() a échoué : raison : " socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    
/* Send instructions. */
    
$msg "\Bienvenue sur le serveur de test PHP.\n" .
        
"Pour quitter, tapez 'quit'. Pour éteindre le serveur, tapez 'shutdown'.\n";
    
socket_write($msgsock$msgstrlen($msg));

    do {
        if (
false === ($buf socket_read($msgsock2048PHP_NORMAL_READ))) {
            echo 
"socket_read() a échoué : raison : " socket_strerror(socket_last_error($msgsock)) . "\n";
            break 
2;
        }
        if (!
$buf trim($buf)) {
            continue;
        }
        if (
$buf == 'quit') {
            break;
        }
        if (
$buf == 'shutdown') {
            
socket_close($msgsock);
            break 
2;
        }
        
$talkback "PHP: You said '$buf'.\n";
        
socket_write($msgsock$talkbackstrlen($talkback));
        echo 
"$buf\n";
    } while (
true);
    
socket_close($msgsock);
} while (
true);

socket_close($sock);
?>

Exemple #2 Exemple avec les sockets : client TCP/IP simple

Cet exemple implémente un client HTTP simple. Il se connecte simplement à une page, envoie une requête HEAD, affiche le résultat et se termine.

<?php
error_reporting
(E_ALL);

echo 
"<h2>Connexion TCP/IP</h2>\n";

/* Lit le port du service WWW. */
$service_port getservbyname('www''tcp');

/* Lit l'adresse IP du serveur de destination */
$address gethostbyname('www.example.com');

/* Crée un socket TCP/IP. */
$socket socket_create(AF_INETSOCK_STREAMSOL_TCP);
if (
$socket === false) {
    echo 
"socket_create() a échoué : raison :  " socket_strerror(socket_last_error()) . "\n";
} else {
    echo 
"OK.\n";
}

echo 
"Essai de connexion à '$address' sur le port '$service_port'...";
$result socket_connect($socket$address$service_port);
if (
$socket === false) {
    echo 
"socket_connect() a échoué : raison : ($result) " socket_strerror(socket_last_error($socket)) . "\n";
} else {
    echo 
"OK.\n";
}

$in "HEAD / HTTP/1.0\r\n\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out '';

echo 
"Envoi de la requête HTTP HEAD...";
socket_write($socket$instrlen($in));
echo 
"OK.\n";

echo 
"Lire la réponse : \n\n";
while (
$out socket_read($socket2048)) {
    echo 
$out;
}

echo 
"Fermeture du socket...";
socket_close($socket);
echo 
"OK.\n\n";
?>