Position actuelle: Accueil> Derniers articles> Comment utiliser socket_accept () pour recevoir des connexions client

Comment utiliser socket_accept () pour recevoir des connexions client

M66 2025-05-24

Dans la programmation réseau, le serveur doit être en mesure d'accepter les demandes de connexion du client. PHP fournit une série de fonctions de socket pour gérer la communication du réseau sous-jacente, où socket_accept () est une fonction importante pour implémenter des connexions d'écoute et de réception du serveur. Cet article introduira en détail comment utiliser socket_accept () pour recevoir des connexions client et montrer comment les utiliser via des exemples.

1. Fonction Introduction

Socket_Accept () est une fonction en PHP qui reçoit une connexion à partir d'une file d'attente d'écoute de socket. La syntaxe de base est la suivante:

 socket_accept(Socket $socket): Socket|false
  • Paramètre :

  • Valeur de retour :

    • Renvoie une nouvelle instance de socket en cas de succès, pour la communication avec le client;

    • Renvoie False en échec.

2. Étapes d'utilisation de base

Avant d'utiliser socket_accept () , vous devez généralement effectuer les étapes suivantes:

  1. Créer un socket: socket_create ()

  2. Adresse de liaison et port: socket_bind ()

  3. Commencez à écouter: socket_listten ()

  4. Recevoir la connexion: socket_accept ()

  5. Communication avec les clients: socket_read () et socket_write ()

  6. Fermez la connexion: socket_close ()

3. Exemple de code

Voici un exemple complet de serveur de socket indiquant comment utiliser socket_accept () pour recevoir des connexions client:

 <?php
// Définir l&#39;adresse et le port
$address = '0.0.0.0';
$port = 12345;

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

// Adresse et port de lier
if (!socket_bind($serverSocket, $address, $port)) {
    die("socket_bind() échouer: " . socket_strerror(socket_last_error($serverSocket)) . "\n");
}

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

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

// Recevoir les connexions du client
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
    echo "socket_accept() échouer: " . socket_strerror(socket_last_error($serverSocket)) . "\n";
} else {
    // Envoyez un message de bienvenue au client
    $welcome = "Bienvenue pour se connecter m66.net serveur\n";
    socket_write($clientSocket, $welcome, strlen($welcome));

    // Lire les données du client
    $input = socket_read($clientSocket, 1024);
    echo "A reçu un message client: " . trim($input) . "\n";

    // Répondre au client
    $response = "Tu l&#39;as envoyé: " . $input;
    socket_write($clientSocket, $response, strlen($response));

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

// 关闭serveur socket
socket_close($serverSocket);
?>

4. Choses à noter

  1. Problème d'autorisations : les autorisations d'administrateur peuvent être nécessaires lors de l'écoute des ports bas (tels que 80 ou 443).

  2. Timeout Processing : socket_accept () est une fonction de blocage. Si vous avez besoin de mode non bloquant, vous pouvez utiliser socket_set_nonblock () .

  3. Sécurité : Des mécanismes de gestion des erreurs et de journalisation appropriés doivent être ajoutés dans les environnements de production pour prévenir les connexions malveillantes.

  4. Prise en charge multi-client : Cet exemple ne gère qu'une seule connexion client. Si vous devez gérer plusieurs clients en même temps, vous pouvez combiner PCNTL_FORK () ou une extension multi-thread.

5. Résumé

Socket_Accept () est un lien indispensable dans la communication réseau PHP, qui permet au serveur d'extraire une connexion client à partir de la file d'attente d'écoute et d'effectuer un traitement ultérieur. Grâce à l'explication et aux exemples de cet article, vous devriez être en mesure de maîtriser le processus de construction du serveur de socket de base et d'utiliser socket_accept () pour réaliser les fonctions de réception et d'interaction des connexions client.