Position actuelle: Accueil> Derniers articles> Utilisez socket_accept () pour créer un serveur PHP TCP de base

Utilisez socket_accept () pour créer un serveur PHP TCP de base

M66 2025-05-23

Dans la programmation réseau, PHP n'est pas seulement utilisé pour développer des applications Web, mais elle peut également être utilisée pour créer des programmes de communication réseau de bas niveau, tels que les serveurs TCP. socket_accept () est l'une des fonctions importantes de PHP pour accepter les connexions du client. Cet article vous amènera à créer un serveur TCP simple étape par étape et à expliquer les points clés.

1. Qu'est-ce que socket_accept ()?

socket_accept () est une fonction dans l'extension de socket PHP qui écoute le serveur pour recevoir des demandes de connexion sur une prise établie. Une fois que le client demande une connexion, socket_accept () renvoie une nouvelle instance de socket qui est utilisée pour communiquer avec le client, plutôt que la prise d'écoute principale.

2. Étapes pour créer un serveur TCP

Étape 1: Créez une prise

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

Cette ligne de code crée un socket TCP ( sock_stream ) d'IPv4 ( af_inet ) et le type de protocole est TCP ( SOL_TCP ).

Étape 2: lier l'adresse et le port

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

Cette étape lie la prise à l'IP et au port local, tels que 12345 .

Étape 3: Écoutez la connexion

 if (!socket_listen($socket, 5)) {
    die("socket_listen() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}

Commencez à écouter des connexions entrantes, 5 indique la longueur d'attente maximale d'attente autorisée.

Étape 4: Acceptez la connexion et traitez la demande

 while (true) {
    echo "En attente de la connexion du client...\n";
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() échouer: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    $welcomeMsg = "Bienvenue m66.net de PHP TCP serveur!\n";
    socket_write($clientSocket, $welcomeMsg, strlen($welcomeMsg));

    // Lire les informations du client
    $input = socket_read($clientSocket, 1024);
    echo "A reçu un message client: " . $input;

    // Répondre au client
    $response = "Tu l'as envoyé: " . trim($input) . "\n";
    socket_write($clientSocket, $response, strlen($response));

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

Dans le code ci-dessus, le serveur bouclera infiniment pour le client pour se connecter. Une fois la connexion établie, un message de bienvenue est envoyé, l'entrée du client est lue et elle est renvoyée telle quelle.

Étape 5: Fermez la prise principale

Bien que le code ci-dessus soit un serveur de boucle infinie, le mécanisme d'interruption ou le traitement du signal doit être ajouté à une utilisation réelle. Le code pour arrêter le serveur est le suivant:

 socket_close($socket);

3. Test de connexion client

Vous pouvez utiliser Telnet pour tester ce serveur TCP:

 telnet m66.net 12345

Si la connexion réussit, vous verrez le message de bienvenue renvoyé par le serveur.

4. Choses à noter

  • L'extension de socket de PHP n'est pas activée par défaut, assurez-vous que les prises sont activées dans php.ini .

  • Veuillez utiliser la ligne de commande pour exécuter le script. L'environnement Web ne convient pas à la gestion de ces services longtemps connectés.

  • Pendant le déploiement réel, des fonctions telles que la gestion des exceptions, la journalisation et le traitement multi-processus doivent être ajoutés.

Conclusion

Grâce à cet article, vous avez appris à créer un serveur TCP simple à l'aide de la fonction PHP socket_accept () . Bien que PHP ne soit pas le langage préféré des services Web, il fournit également les outils nécessaires pour répondre aux besoins de base. Cet exemple de serveur montre la puissante flexibilité de PHP.