Position actuelle: Accueil> Derniers articles> Quelles sont les différences et les précautions pour l'application de la fonction Stream_Socket_Shutdown dans les protocoles UDP et TCP?

Quelles sont les différences et les précautions pour l'application de la fonction Stream_Socket_Shutdown dans les protocoles UDP et TCP?

M66 2025-06-22

1. Syntaxe de base de la fonction Stream_Socket_Shutdown

Tout d'abord, jetons un coup d'œil à la syntaxe de base de la fonction Stream_Socket_Shutdown :

 bool stream_socket_shutdown ( resource $stream , int $how )
  • $ Stream : est une ressource de socket qui a été ouverte via des fonctions telles que Stream_Socket_Client ou Stream_Socket_Server .

  • $ comment : est le moyen de fermer l'opération. L'une des constantes suivantes peut être utilisée:

    • Stream_shut_rdwr : fermer les opérations de lecture et d'écriture en même temps.

    • Stream_shut_rd : fermez l'opération de lecture.

    • Stream_shut_wr : fermez l'opération d'écriture.

2. Application dans le protocole TCP

Le protocole TCP est axé sur la connexion, ce qui signifie que la connexion doit être établie avant la communication et que la connexion doit être fermée gracieusement une fois la communication terminée. Le rôle de la fonction Stream_Socket_Shutdown dans les connexions TCP est particulièrement important, en particulier après avoir effectué des transferts de données, nous devons nous assurer que la connexion est correctement fermée pour éviter la fuite des ressources.

Dans le protocole TCP, le processus de fonctionnement habituel est:

  1. Utilisez Stream_Socket_Client ou Stream_Socket_Server pour établir une connexion.

  2. Une fois le transfert de données terminé, utilisez Stream_Socket_Shutdown ($ stream, stream_shut_wr) pour fermer l'opération d'écriture (indiquant à l'hôte distant que je n'envoie plus de données).

  3. Attendez ensuite que l'hôte distant terminer la transmission de données et fermer la connexion, en utilisant généralement Stream_Socket_Shutdown ($ stream, stream_shut_rd) pour fermer l'opération de lecture.

Un exemple d'arrêt de la connexion TCP typique:

 $stream = stream_socket_client("tcp://m66.net:80", $errno, $errstr);

if (!$stream) {
    echo "Error: $errno - $errstr\n";
} else {
    fwrite($stream, "GET / HTTP/1.1\r\nHost: m66.net\r\nConnection: close\r\n\r\n");
    
    // Fermez l'opération d'écriture,Indique que les données ne sont plus envoyées
    stream_socket_shutdown($stream, STREAM_SHUT_WR);
    
    // Lisez la réponse
    while ($response = fgets($stream)) {
        echo $response;
    }
    
    // Fermez l'opération de lecture,Fermer la connexion
    stream_socket_shutdown($stream, STREAM_SHUT_RD);
    
    fclose($stream);
}

Notes:

  • Dans le protocole TCP, Stream_Socket_Shutdown vous permet de désactiver les opérations de lecture et d'écriture séparément, ce qui est très utile pour les scénarios où les connexions doivent être fermées gracieusement.

  • Lorsque vous utilisez Stream_Shut_WR , l'hôte distant recevra généralement un signal "d'arrêt de connexion", qui fermera également la connexion et libérera les ressources.

3. Application dans le protocole UDP

Contrairement au protocole TCP, UDP est un protocole sans connexion, il n'est donc pas nécessaire d'établir une connexion persistante dans le protocole UDP, et il n'a pas besoin de fermer la connexion aussi élégamment que TCP. Stream_Socket_Shutdown a un rôle limité dans le protocole UDP, car UDP n'implique pas de contrôle des flux de données ou de l'arrêt de la connexion.

Comment utiliser dans le protocole UDP:

  1. Utilisez Stream_Socket_Client ou Stream_Socket_Server pour créer une prise UDP.

  2. Après avoir envoyé un paquet, il n'est pas nécessaire d'appeler explicitement Stream_Socket_Shutdown pour fermer les opérations de lecture et d'écriture, car la communication UDP n'a pas le concept de "connexion".

Un exemple typique d'envoi de données UDP:

 $stream = stream_socket_client("udp://m66.net:12345", $errno, $errstr);

if (!$stream) {
    echo "Error: $errno - $errstr\n";
} else {
    fwrite($stream, "Hello, UDP server!");
    fclose($stream);
}

Notes:

  • Dans le protocole UDP, la fonction Stream_Socket_Shutdown n'a généralement pas besoin d'être appelée. Même si on l'appelle, le comportement n'affectera pas la connexion comme le fait TCP, car le protocole UDP lui-même n'a pas de concept clair de connexion.

  • Par conséquent, dans les scénarios d'application UDP, l'utilisation de la fonction Stream_Socket_Shutdown ne modifie pas significativement le comportement de la transmission de données.

4. Résumé

Il existe des différences évidentes dans l'application de la fonction Stream_Socket_Shutdown dans les protocoles TCP et UDP. Pour le protocole TCP, il aide à clôturer les connexions gracieusement, garantit que la transmission des données est complète et libère des ressources. Dans le protocole UDP, en raison de sa nature sans connexion, le rôle de Stream_Socket_Shutdown est moins important et n'a généralement pas besoin d'être utilisé.

Lorsque les développeurs utilisent Stream_Socket_Shutdown , ils doivent choisir la méthode d'arrêt appropriée en fonction du type de protocole réel utilisé. Dans le protocole TCP, l'utilisation rationnelle de Stream_Shut_Wr et Stream_Shut_Rd peut assurer l'arrêt correct de la connexion et la version rapide des ressources; Bien que dans le protocole UDP, cette fonction n'est généralement pas requise.