Un message de diffusion est un message envoyé à tous les appareils du même réseau, et non à un appareil spécifique. Ceci est généralement utilisé dans des scénarios où tous les appareils du même réseau local (LAN) doivent être reçus, tels que la découverte de services, les annonces ou les notifications de mise à jour.
Dans PHP, nous pouvons utiliser la fonction socket_sendto pour envoyer des messages de diffusion. L'adresse de destination d'un message de diffusion est généralement l'adresse de diffusion du réseau (telle que 255.255.255.255 ) et doit être envoyée à l'aide du protocole UDP.
Pour implémenter l'envoi de messages de diffusion, nous devons d'abord créer une prise UDP, puis utiliser la fonction socket_sendto pour envoyer le message à l'adresse de diffusion. Voici les étapes de base pour implémenter les fonctions de diffusion:
Créer un socket : créez une prise UDP à l'aide de socket_create .
Définir les autorisations de diffusion : activer la diffusion via socket_set_option .
Envoyer des messages de diffusion : utilisez socket_sendto pour envoyer des messages.
Fermer la prise : fermez la prise après l'envoi du message.
Voici un exemple complet de l'envoi de messages de diffusion à l'aide de la fonction Socket_sendto :
<?php
// Créer unUDPPrises
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (!$socket) {
echo "无法创建Prises: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
// 设置Prises选项以允许广播
$opt = 1;
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, $opt);
// Diffuser le contenu du message
$message = "Ceci est un message de diffusion!";
// Adresse de diffusion et port
$broadcastAddress = '255.255.255.255';
$port = 12345;
// Envoyer des messages de diffusion
$bytesSent = socket_sendto($socket, $message, strlen($message), 0, $broadcastAddress, $port);
if ($bytesSent === false) {
echo "Échec de l'envoi: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "Le message de diffusion a été envoyé avec succès!\n";
}
// 关闭Prises
socket_close($socket);
?>
Créer un socket : socket_create (af_inet, sock_dgram, sol_udp) est utilisé pour créer une prise UDP.
Définir les autorisations de diffusion : socket_set_option ($ socket, sol_socket, so_broadcast, 1) activer les options de diffusion.
Adresse de diffusion : 255.255.255.255 est une adresse de diffusion couramment utilisée, qui représente tous les appareils du réseau local.
Envoyer des messages : socket_sendto ($ socket, $ message, strlen ($ message), 0, $ BroadcastAddress, $ port) envoie des messages via l'adresse de diffusion et le port.
Configuration du réseau : assurez-vous que votre réseau permet la diffusion. Si vous avez des restrictions sur votre pare-feu ou votre routeur, cela peut empêcher l'envoi de messages de diffusion.
Adresse de diffusion : Dans certaines configurations de réseau, vous devrez peut-être utiliser l'adresse de diffusion du sous-réseau, et pas seulement 255.255.255.255.255 . Cela peut être déterminé en calculant l'adresse de diffusion du réseau.
Gestion des erreurs : lorsqu'elle est utilisée dans un environnement de production, assurez-vous que toutes les situations d'erreur sont correctement gérées, telles que l'échec de la création de socket, l'échec d'envoi de messages, etc.
Les scénarios d'application des messages de diffusion sont très larges, et les éléments suivants sont quelques scénarios d'utilisation courants:
Découverte de service LAN : l'appareil avertit d'autres appareils sur le réseau de leur propre existence via des messages de diffusion.
Notification système : envoyez des notifications à tous les appareils du même réseau, tels que les mises à jour du système, les messages d'avertissement, etc.
Mise à jour en temps réel : diffuser des données sur tous les appareils, tels que les mises à jour du statut en temps réel dans les jeux, ou les flux de données synchronisés en temps réel.