Position actuelle: Accueil> Derniers articles> Avec socket_listeten () pour créer un serveur réseau de base

Avec socket_listeten () pour créer un serveur réseau de base

M66 2025-05-28

Dans PHP, en utilisant des extensions de socket, nous pouvons implémenter de manière très flexible les fonctions de communication réseau et même l'utiliser pour créer un serveur réseau de base. Cet article se concentrera sur la façon d'utiliser les fonctions socket_listten () et socket_accept () pour créer un serveur TCP simple.

Que sont Socket_Listeten () et Socket_Accept ()?

  • socket_Listeten ()
    Cette fonction est utilisée pour écouter une ressource de socket avec une IP et un port qui attendent la demande de connexion client.

  • socket_accept ()
    Cette fonction est utilisée pour accepter une demande de connexion client entrante et renvoie une nouvelle ressource de socket pour communiquer avec le client.

Analyse des processus de base

  1. Créer une ressource de socket ( socket_create )

  2. Lier ip et port ( socket_bind )

  3. Écouter le port ( socket_listeten )

  4. Boucler et accepter les connexions du client ( socket_accept )

  5. Lire et écrire des données et une communication complète

  6. Fermer les prises client et serveur

Exemple de code

 <?php
// créerTCP socket(AF_INETFamille de protocole,Streaming)
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
    die("socket_create() échouer: " . socket_strerror(socket_last_error()) . "\n");
}

// LierIPet ports
$address = '0.0.0.0';  // Écoutez toutes les interfaces réseau
$port = 8080;
if (!socket_bind($server, $address, $port)) {
    die("socket_bind() échouer: " . socket_strerror(socket_last_error($server)) . "\n");
}

// Commencer à surveiller,La longueur de file d&#39;attente qui permet d&#39;attendre la connexion est5
if (!socket_listen($server, 5)) {
    die("socket_listen() échouer: " . socket_strerror(socket_last_error($server)) . "\n");
}

echo "Le serveur est démarré,moniteur {$address}:{$port}\n";

while (true) {
    // Bloquer et attendre la connexion du client
    $client = socket_accept($server);
    if ($client === false) {
        echo "socket_accept() échouer: " . socket_strerror(socket_last_error($server)) . "\n";
        continue;
    }

    // Lire les données du client,Lecture maximale1024octet
    $input = socket_read($client, 1024);
    if ($input === false) {
        echo "socket_read() échouer: " . socket_strerror(socket_last_error($client)) . "\n";
        socket_close($client);
        continue;
    }

    echo "Données du client reçu: $input\n";

    // Traitement des données - Voici une réponse simple à un message sur le client
    $response = "Bonjour,Client!Les données que vous envoyez sont:" . trim($input) . "\n";
    socket_write($client, $response, strlen($response));

    // 关闭Client连接
    socket_close($client);
}

// Arrêtez le serveursocket(Habituellement, je n&#39;irai pas ici)
socket_close($server);
?>

illustrer

  • Dans une utilisation réelle, vous pouvez étendre la logique de lecture et d'écriture en fonction de vos besoins, comme la mise en œuvre d'un analyseur de protocole complet ou le traitement de plusieurs clients de manière asynchrone.

  • L'IP de l'auditeur peut être défini sur une adresse spécifique ou écouter toutes les interfaces réseau disponibles à l'aide de «0.0.0.0» .

  • Le numéro de port doit être évité à l'aide du système pour conserver les ports, et généralement, les ports supérieurs à 1024 doivent être sélectionnés.

  • Le code ci-dessus est un serveur unique qui est bloqué de manière synchrone, adapté à la compréhension des débutants.

résumé

Via socket_listten () et socket_accept () , PHP peut créer des programmes de serveur TCP très directement pour réaliser des fonctions de communication réseau de base. Bien que PHP ne soit pas un langage conçu spécifiquement pour les serveurs haute performance, il est toujours très pratique de l'utiliser pour prototyper rapidement les petits services ou créer des applications d'interaction réseau simples.