Maison >développement back-end >tutoriel php >Comment implémenter un socket en php
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
AF_INET
//Le protocole qui génère des sockets, utilise TCP ou UDP pour la transmission et est utilisé dans les adresses IPv4
AF_INET6
//Protocole qui génère un socket, utilise TCP ou UDP pour la transmission, utilisé dans l'adresse IPv6
AF_UNIX
//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
SOCK_STREAM
/ /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.
SOCK_DGRAM
//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.
SOCK_SEQPACKET
//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.
SOCK_RAW
//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)
SOCK_RDM
//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
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
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
if(!extension_loaded('sockets')) {
if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {
dl('php_sockets.dll') ;
}else{
dl('sockets.so');
}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
// 获取协议 $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"); }
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!