Maison  >  Article  >  développement back-end  >  Comment implémenter un socket en php

Comment implémenter un socket en php

小云云
小云云original
2018-03-31 14:09:525151parcourir

Cet article partage principalement avec vous la méthode d'implémentation de socket en PHP, principalement sous forme de texte et de code, j'espère qu'il pourra vous aider.

1. Introduction à Socket
1. Socket n'est qu'une structure de données.
2. Utilisez cette structure de données de socket pour démarrer une session entre le client et le serveur.
3. Le serveur est toujours à l'écoute et se prépare à générer une nouvelle session. Lorsqu'un client se connecte au serveur, il ouvre un port sur lequel le serveur écoute une session.
4. Le serveur accepte la demande de connexion du client puis effectue une boucle. Le client peut désormais envoyer des informations au serveur, et le serveur peut envoyer des informations au client.

2. Variables de socket
Pour générer un Socket, vous avez besoin de trois variables : un protocole, un type de socket et un type de protocole public.

1. Accord

Afficher le code source, copier dans le presse-papiers et imprimer l'aide

  1. AF_INET

  2. //Le protocole qui génère des sockets, utilise TCP ou UDP pour la transmission et est utilisé dans les adresses IPv4

  3. AF_INET6

  4. //Protocole qui génère un socket, utilise TCP ou UDP pour la transmission, utilisé dans l'adresse IPv6

  5. AF_UNIX

  6. //Protocole local, utilisé sur les systèmes Unix et Linux, il est rarement utilisé, généralement utilisé lorsque le client et le serveur sont sur la même machine

2. Type de socket

Afficher le code source, copier dans le presse-papiers et imprimer l'aide

  1. SOCK_STREAM

  2. / /Ce protocole est une connexion séquentielle, fiable et basée sur un flux d'octets intégré aux données. Il s'agit du type de socket le plus couramment utilisé. Ce socket utilise TCP pour la transmission.

  3. SOCK_DGRAM

  4. //Ce protocole est un appel de transmission sans connexion et de longueur fixe . Ce protocole n'est pas fiable et utilise UDP pour ses connexions.

  5. SOCK_SEQPACKET

  6. //Ce protocole est une connexion fiable à double ligne. Envoyez des paquets de longueur fixe pour la transmission. Ce paquet doit être accepté complètement avant de pouvoir être lu.

  7. SOCK_RAW

  8. //Ce type de socket fournit un accès réseau unique, ce type de socket utilise le protocole public ICMP. (ping et traceroute utilisent ce protocole)

  9. SOCK_RDM

  10. //Ce type est Rarement utilisé, non implémenté sur la plupart des systèmes d'exploitation. Il est prévu pour être utilisé par la couche liaison de données et ne garantit pas l'ordre des paquets de données

3. >Afficher le code source, copier dans le presse-papiers et imprimer l'aide

    ICMP
  1. //Internet Control Message Protocol, principalement utilisé sur les passerelles et les hôtes, utilisé pour vérifier les conditions du réseau et signaler les messages d'erreur
  2. UDP
  3. //Datagramme utilisateur Protocole, c'est un protocole de transmission sans connexion et peu fiable
  4. TCP
  5. //Transmission Protocole de contrôle, il s'agit du protocole public fiable le plus couramment utilisé. Il peut garantir que le paquet de données peut atteindre le destinataire si une erreur se produit pendant le processus de transmission, il renverra le paquet d'erreur.
  6. 3. Fonction Socket
1. socket_create

Fonction : Générer un socket, ce qui équivaut à générer une structure de données socket
Utilisation : socket_create (int domain, int type, int protocol )
Paramètres : domaine, protocole ; type, type ; protocole, protocole public
Retour : ressource socket en cas de succès, ou FALSE en cas d'erreur

2. : Lier le socket à une adresse IP et un port

Utilisation : socket_bind (ressource socket, string adresse [, int port])

Paramètres : socket, socket resource; : Booléen

3. socket_accept
Fonction : Accepter une connexion Socket
Utilisation : socket_accept (resource socket)
Paramètres : socket, socket resource
Retours : Renvoie une nouvelle ressource socket en cas de succès, ou FALSE en cas de succès erreur.

4. socket_connect()
Fonction : démarrer une connexion socket
Utilisation : socket_connect (ressource socket, adresse de chaîne [, port int])
Paramètres : socket, ressource socket ; adresse, adresse IP ; port, port
Retour : booléen

5. socket_listen
Fonction : écouter toutes les connexions à partir du socket spécifié
Utilisation : socket_listen (ressource socket [, int backlog] )
Paramètres : socket, ressource de socket ;
Retour : booléen

6. socket_read
Fonction : lire les données d'une longueur spécifiée
Utilisation : socket_read (ressource socket, int length [, int type] )
Paramètres : socket, ressource de socket ; longueur, type de caractère, PHP_BINARY_READ |PHP_NORMAL_READ
Retour : chaîne

7. socket_write
Fonction : écrire des données dans le cache de socket
Utilisation : socket_write (socket de ressource, tampon de chaîne [, longueur int])
Paramètres : socket, ressource de socket ;tampon, caractères ; longueur, longueur des caractères ;
Retour : booléen

8, socket_send()
Fonction : Cette fonction envoie des données au socket connecté
Utilisation : socket_send (ressource socket, string buf, int len, int flags)
Paramètres : socket, socket resource;buf, caractère; , longueur des caractères ;
Retour : booléen

9. socket_last_error
Fonction : obtenir le dernier code d'erreur du socket actuel
Utilisation : socket_last_error ([resource socket])
Paramètre : socket ,socket resource;
Retour : int

10. socket_strerror
Fonction : renvoie l'erreur détaillée du numéro d'erreur spécifié
Utilisation : socket_strerror (int errno)
Paramètres : errno , socket_last_error no ;
Retour : chaîne

11. socket_close
Fonction : fermer une ressource socket
Utilisation : socket_close ([resource socket])
Paramètres : socket, ressource socket ;
Retour : null

4. Mode d'emploi
Confirmez la méthode d'ouverture du socket
a Modifiez le fichier PHP.ini et supprimez extension=php_sockets.dll Le commentaire précédent :
b. Code pour charger la bibliothèque d'extension

Afficher la copie du code source dans le presse-papiers pour imprimer l'aide

  1. if(!extension_loaded('sockets')) {

  2. if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {

  3. dl('php_sockets.dll') ;

  4. }else{

  5. dl('sockets.so');

    }
  6. 5. Programmation du socket
  7. 1. Côté serveur

    Fonction :
  8. A initialiser un socket et ouvrir un cache. Envoyez et recevez des données.

b. Attendez la connexion. Une fois la connexion générée, elle affichera "Socket connecté" sur l'écran côté serveur.

c. Le serveur vérifie le tampon. S'il y a des données dans le tampon, il enverra les données à l'ordinateur connecté.

Ensuite, il envoie un message d'acceptation pour ces données. Une fois qu'il accepte le message, il enregistre le message dans les données, informe l'ordinateur connecté du message et ferme enfin la connexion.


d. Une fois la connexion fermée, le serveur commence à traiter la connexion suivante.

Afficher la copie du code source dans le presse-papiers, aide à l'impression


Client

    Fonction :
  1. a. . Le client se connecte au serveur. Le client lit les données.
    // 获取协议  
    $commonProtocol = getprotobyname("tcp");  
      
    //产生一个socket  
    $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);  
      
    //把socket绑定在一个IP地址和端口上  
    socket_bind($socket, 'localhost', 1337);   
      
    //监听由指定socket的所有连接  
    socket_listen($socket);  
      
    //初始化buffer  
    $buffer = "NO DATA";  
    while(true) {  
        //接受一个Socket连接  
        $connection = socket_accept($socket);  
        printf("Socket connected\r\n");  
      
        // 检测 buffer  
        if($buffer != ""){  
            printf("Something is in the buffer...sending data...\r\n");  
            //写数据到socket缓存  
            socket_write($connection, $buffer . "\r\n");  
            printf("Wrote to socket\r\n");  
        }else {  
            printf("No Data in the buffer\r\n");  
        }  
      
        //读取指定长度的数据  
        while($data = socket_read($connection, 1024, PHP_NORMAL_READ))  
        {  
            $buffer = $data;  
            //写数据到socket缓存  
            socket_write($connection, "Information Received\r\n");  
            printf("Buffer: " . $buffer . "\r\n");  
        }  
        //关闭一个socket资源  
        socket_close($connection);  
        printf("Closed the socket\r\n\r\n");  
    }
  2. b. S'il s'agit de la première connexion à arriver dans cette boucle pour la première fois, le serveur renverra "NO DATA" au client. Si cela se produit, le client est au top de la connexion.

c. Le client envoie ses données au serveur, les données sont envoyées au serveur et le client attend une réponse. Une fois la réponse reçue, il écrit la réponse sur l'écran.

Afficher la copie du code source dans le presse-papiers, aide à l'impression

Recommandations associées :

Explication détaillée de la programmation socket en PHP avec des exemples

Explication détaillée de la programmation SOCKET en PHP

Explication détaillée de la socket communication en php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn