Position actuelle: Accueil> Derniers articles> socket_accept () + socket_read (): implémenter la lecture du message client

socket_accept () + socket_read (): implémenter la lecture du message client

M66 2025-05-20

Lorsque vous utilisez PHP pour la programmation réseau, Socket est un mécanisme important pour implémenter la communication serveur-client. socket_accept () et socket_read () sont des fonctions clés pour gérer les connexions client et la lecture des messages. Cet article expliquera en détail comment utiliser ces deux fonctions pour créer un programme de serveur TCP simple pour réaliser la fonction de réception des messages clients.

1. Préparation

Tout d'abord, assurez-vous que PHP a une extension de sockets installée. Utilisez la commande suivante dans la ligne de commande pour vérifier si elle est prise en charge:

 php -m | grep sockets

S'il n'est pas activé, vous pouvez non les commises = sockets dans php.ini et redémarrer le serveur.

2. Créez un serveur de socket TCP

Vous trouverez ci-dessous un exemple complet de code indiquant comment utiliser socket_accept () et socket_read () pour recevoir des messages envoyés par les clients.

 <?php

// installation IP et ports
$host = '0.0.0.0';
$port = 8080;

// créer Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() échouer: " . socket_strerror(socket_last_error()) . "\n");
}

// Se lier au IP et ports
if (!socket_bind($socket, $host, $port)) {
    die("socket_bind() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// Commencez à écouter la connexion
if (!socket_listen($socket, 5)) {
    die("socket_listen() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "Le serveur a commencé,moniteur {$host}:{$port}...\n";

// Connexions du client de traitement de la boucle infinie
while (true) {
    // Acceptez les connexions du client
    $client = socket_accept($socket);
    if ($client === false) {
        echo "socket_accept() échouer: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // Lire les messages du client
    $input = socket_read($client, 1024);
    if ($input === false) {
        echo "socket_read() échouer: " . socket_strerror(socket_last_error($client)) . "\n";
    } else {
        echo "A reçu un message client: " . trim($input) . "\n";

        // Répondre au client
        $response = "Le serveur a reçu un message: " . $input . "\n";
        socket_write($client, $response, strlen($response));
    }

    // Fermer la connexion du client
    socket_close($client);
}

// Fermez le principal Socket
socket_close($socket);

3. Exemple du client (facultatif)

Vous pouvez utiliser Telnet pour tester le serveur ou écrire un client PHP simple comme suit:

 <?php

$host = 'm66.net';
$port = 8080;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("créer客户端 socket échouer: " . socket_strerror(socket_last_error()) . "\n");
}

if (!socket_connect($socket, $host, $port)) {
    die("连接échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}

$message = "Bonjour,Côté serveur!";
socket_write($socket, $message, strlen($message));

$response = socket_read($socket, 1024);
echo "收到Côté serveur回应: $response\n";

socket_close($socket);

Iv. Explication

  • socket_accept () : utilisé pour accepter les demandes de connexion du client. S'il n'y a pas de connexion client, il bloque en attente.

  • socket_read () : utilisé pour lire les données du client. Il peut spécifier le nombre maximum d'octets à lire, généralement 1024 ou plus.

  • socket_write () : utilisé pour envoyer des données au client.

5. Résumé

Le mécanisme de communication TCP de base peut être implémenté à l'aide de socket_accept () et socket_read () . Bien que PHP ne soit pas le langage le plus utilisé pour la programmation de réseau sous-jacente, il a toujours de solides capacités de communication réseau grâce à des extensions de socket. Dans certains scénarios spécifiques, tels que la construction de services légers, les auditeurs de messages ou les composants de la passerelle, PHP Socket est un choix simple et pratique.

Avec les exemples de cet article, vous avez appris à créer une prise de serveur, à accepter les connexions client, à lire les messages clients et à répondre. En combinant la gestion des erreurs appropriée et la conception simultanée, un système de communication plus complexe peut être construit.