Position actuelle: Accueil> Derniers articles> Comment implémenter un simple serveur Echo (serveur Echo) à l'aide de la fonction socket_accept () de PHP?

Comment implémenter un simple serveur Echo (serveur Echo) à l'aide de la fonction socket_accept () de PHP?

M66 2025-06-26

Dans PHP, nous pouvons créer des programmes de services réseau via des extensions de socket. Parmi eux, la fonction socket_accept () est l'une des fonctions clés lors de la création d'applications de serveur basées sur TCP. Cet article utilisera un exemple complet pour décrire comment implémenter un simple serveur Echo (serveur Echo) à l'aide de socket_accept () .

1. Introduction à la fonction socket_accept ()

socket_accept () est utilisé pour accepter une demande de connexion au client. Cette fonction bloque sur la prise de serveur jusqu'à ce qu'une connexion entre. Lorsqu'il réussit, il renvoie une nouvelle ressource de socket qui peut être utilisée pour communiquer avec le client.

grammaire:

 resource socket_accept ( resource $socket )
  • $ Socket est un socket serveur créé et écouté via socket_create () et socket_bind () .

  • Renvoie une ressource de socket qui communique avec le client.

2. Étapes de base pour créer un serveur d'écho

Voici les étapes complètes pour créer un simple serveur d'écho:

1. Créez une prise de serveur

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

2. Bind Adresse IP et port

 $host = '0.0.0.0';
$port = 12345;
if (!socket_bind($server, $host, $port)) {
    die("socket_bind() échouer: " . socket_strerror(socket_last_error($server)) . "\n");
}

3. Écoutez la connexion

 if (!socket_listen($server, 5)) {
    die("socket_listen() échouer: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "Le serveur est démarré,Écouter le port $port ...\n";

4. Accepter les connexions et les données de processus

 while (true) {
    $client = socket_accept($server);
    if ($client === false) {
        echo "socket_accept() échouer: " . socket_strerror(socket_last_error($server)) . "\n";
        continue;
    }

    $msg = "Bienvenue pour se connecter au serveur Echo!Veuillez saisir le contenu,Le serveur reviendra tel quel。\n";
    socket_write($client, $msg, strlen($msg));

    while (true) {
        $input = socket_read($client, 2048, PHP_NORMAL_READ);
        if ($input === false || trim($input) === 'exit') {
            break;
        }
        $input = trim($input);
        $output = "Vous êtes entré: $input\n";
        socket_write($client, $output, strlen($output));
    }

    socket_close($client);
    echo "Connexion du client fermé。\n";
}

5. Éteignez le serveur

Lorsque vous devez arrêter le serveur, vous pouvez fermer la prise principale:

 socket_close($server);

3. Méthode de test

Vous pouvez utiliser Telnet ou n'importe quel outil client qui prend en charge la connexion TCP pour se connecter au serveur:

 telnet m66.net 12345

Une fois la connexion réussie, le serveur répondra au message de bienvenue et renverra tout ce que vous entrez en tel quel.

4. Choses à noter

  • L'extension de socket de PHP n'est pas activée par défaut et doit être activée dans php.ini .

  • Cet exemple est le mode de blocage et convient à des fins de démonstration et d'enseignement. Dans les environnements de production réels, il est recommandé d'utiliser le mode non bloquant ou d'utiliser des méthodes telles que Stream_Select () pour obtenir un support multi-client.

  • Assurez-vous que le pare-feu et le système d'exploitation permettent aux ports d'écoute de communiquer.

5. Résumé

Via socket_accept () , PHP peut créer une application de réseau TCP de base. Le serveur Echo implémenté dans cet article est un bon point de départ pour comprendre le mécanisme de programmation de socket. Vous pouvez davantage vous développer en fonction de cela pour implémenter des services de réseau plus complexes, tels que les salles de chat, la télécommande, etc.

L'exemple Echo Server est l'un des modèles les plus élémentaires de la programmation de socket, mais il ouvre la porte à la programmation réseau pour vous. En maîtrisant ces fondations, le potentiel de PHP dans la communication réseau sera infiniment élargi.