Vous pouvez le faire en créant un socket udp normal avec socket_create()
et en utilisant socket_bind()
pour le lier à un port spécifique. Ensuite, utilisez par exemple socket_sendto pour spécifier le point de terminaison et le port auquel l'envoyer. Exemple de code suivant.
Un serveur simple qui recrache le numéro de port et l'adresse IP du client à l'aide socket_stream_server()
:
<?php
set_time_limit (20);
$socket = stream_socket_server("udp://127.0.0.1:50000",
$errno, $errstr,
STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$packet = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($packet !== false);
?>
et le client est comme ceci:
<?php
$address = '127.0.0.1';
$port = 50001;
$dest_address = '127.0.0.1';
$dest_port = 50000;
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed:" . socket_strerror(socket_last_error($sock)) . "\n";
}
$msg = "Ping !";
socket_sendto($sock, $msg, strlen($msg), 0, $dest_address, $dest_port);
socket_close($sock);
?>
Exécution du serveur (sur la ligne de commande) donne cette sortie lors de l'exécution du client plusieurs fois:
<[email protected] php>php server.php
127.0.0.1:50001
127.0.0.1:50001
127.0.0.1:50001
^C
<[email protected] php>
Si vous envisagez d'utiliser ce de Windows gardez à l'esprit que vous devrez peut-être vous assurer que vous avez un support pour les sockets.
– Sebas