Table des matières
Pour créer une application basée sur socket, vous devez Pour en savoir plus sur le fonctionnement des sockets, voici quelques fonctions importantes des sockets en PHP.

fonction socket en PHP

May 04, 2018 pm 03:16 PM
php socket 函数

Cet article présente principalement la fonction socket en PHP, qui a une certaine valeur de référence. Maintenant, je la partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Pour créer une application basée sur socket, vous devez Pour en savoir plus sur le fonctionnement des sockets, voici quelques fonctions importantes des sockets en PHP.

1. socket_create ( int $domain , int $type , int $protocol )

Cette fonction est utilisée pour créer un socket. Elle a trois paramètres et la valeur de retour est un handle (ressource).

$domain précise la famille de protocoles de communication utilisée lors de la création du socket. Les valeurs facultatives sont :

  • AF_INET : Protocole Internet basé sur IPv4

  • AF_INET6 : Protocole Internet basé sur IPv6

  • AF_UNIX : protocole de communication local UNIX

$type spécifie le type d'interaction de la communication socket, qui est facultatif La valeur est :

  • SOCK_STREAM : fournit une transmission de flux d'octets sérialisée, fiable, en duplex intégral, basée sur la connexion, prend en charge TCP

  • SOCK_DGRAM : fournit un type de datagramme, sans connexion, d'une longueur maximale fixe, une transmission de fonction d'adressage automatique, prend en charge UDP

  • SOCK_SEQPACKET : fournit une transmission de datagrammes sérialisée, fiable, à double canal et basée sur la connexion.

  • SOCK_RAW : fournit un protocole d'accès réseau original, peut construire manuellement des sockets de types de protocoles spéciaux, prend en charge les requêtes ICMP (telles que ping)

  • SOCK_RDM : fournit une transmission de datagramme fiable, la commande ne peut pas être garantie

$protocol spécifie le protocole de transmission spécifique utilisé par le socket, notamment ICMP, UDP et TCP. La constante SOL_UDP correspond à UDP et la constante SOL_TCP correspond à la constante. TCP.

2. socket_bind ( ressource $socket , chaîne $adresse [, int $port = 0 ] )

Cette fonction est utilisée Liez l'adresse IP et le port au handle créé par socket_create. Il a trois paramètres et renvoie une valeur booléenne.

$socket est un paramètre obligatoire, représentant le handle créé par la fonction socket_create

$address est un paramètre obligatoire, représentant l'adresse IP à lier

$port est un paramètre facultatif, représentant le numéro de port à lier. Il spécifie quel port est utilisé pour surveiller les connexions de socket lorsque le. La fonction socket_create est la première. Lorsque le premier paramètre est AF_INET, ce paramètre doit être spécifié.

3. socket_listen ( ressource $socket [, int $backlog = 0 ] )

Cette fonction est utilisée pour surveillance La connexion socket à laquelle accéder ne peut être utilisée que lorsque le type d'interaction de la socket est SOCK_STREAM ou SOCK_SEQPACKET . Deux paramètres, renvoie une valeur booléenne.

$socket est un paramètre obligatoire, représentant le handle créé par la fonction socket_create (et a été lié à l'hôte )

$backlog est un paramètre facultatif, indiquant le nombre maximum de connexions en attente de traitement dans la file d'attente (backlog autorisé).

4.

socket_set_block ( ressource $socket )Cette fonction est utilisée pour définir le handle du socket en mode blocage. Elle n'a qu'un seul paramètre obligatoire et renvoie une valeur booléenne. Il peut convertir un socket en mode non bloquant en mode bloquant.

Lors de l'exécution d'une opération (réception, envoi, connexion, acceptation, etc.) dans un socket en mode blocage, le script suspendra l'exécution jusqu'à ce qu'il reçoive un signal ou termine l'opération.

$socket est un paramètre obligatoire, représentant un handle de socket valide (créé par socket_create ou socket_accept).

Une brève introduction à la différence entre le mode bloquant et le mode non bloquant :

Non bloquant signifie que l'opération de fonction ne bloquera pas le thread actuel jusqu'à ce que le résultat ne puisse pas être obtenu immédiatement, mais reviendra immédiatement. Le blocage signifie que vous n'êtes pas autorisé à revenir tant que vous n'avez pas terminé le travail. Vous devez obtenir une réponse de l'autre partie avant de pouvoir passer à l'étape suivante. Surtout lorsqu'il y a de nombreux utilisateurs, il est nécessaire de le régler sur non bloquant. S'il s'agit du mode blocage, si deux clients sont connectés en même temps, lorsque le serveur traite la demande d'un client, la demande de l'autre client sera bloquée. Ce n'est qu'après le traitement des affaires du client précédent que la demande de ce dernier client sera traitée. sera répondu.

5. socket_write ( ressource $socket , string $buffer [, int $length = 0 ] )

Cette fonction est utilisée pour écrire des données tampon d'une taille spécifiée sur le socket. Elle a trois paramètres et renvoie le nombre d'octets des données écrites.

$socket est un paramètre obligatoire et représente un handle de socket valide.

$buffer est un paramètre obligatoire, spécifiant les données de chaîne à écrire.

$length est un paramètre facultatif, spécifiant le nombre d'octets de données écrits tour à tour dans le socket, si sa valeur est supérieure que 🎜>Le nombre d'octets dans $buffer, il interceptera silencieusement jusqu'à la longueur de $buffer en octets.

6. socket_read ( ressource $socket , int $length [, int $type = PHP_BINARY_READ ] )Cette fonction est utilisée pour lire des données d'une longueur d'octet spécifiée à partir du socket. Elle a trois paramètres et renvoie les données de chaîne lues.

$socket est un paramètre obligatoire et représente un handle de socket valide.
$length est un paramètre obligatoire, spécifiant la longueur des octets à lire.

$type est un paramètre facultatif. La valeur par défaut est PHP_BINARY_READ, ce qui signifie une lecture sécurisée des données binaires ; PHP_NORMAL_READ signifie arrêter la lecture lorsque r ou n est rencontré.

7. pfsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

Cette fonction est utilisée pour implémenter une connexion socket persistante, c'est-à-dire une connexion longue, et renvoie un handle. La différence entre celui-ci et fsockopen est que la connexion établie par pfsockopen ne sera pas déconnectée une fois le script exécuté.

8.

socket_set_option ( ressource$socket , int$level , int$optname , mixed$optval )Cette fonction est utilisée pour définir les options de contrôle du socket. Elle possède quatre paramètres et renvoie une valeur booléenne.

$socket est un paramètre obligatoire et représente un handle de socket valide.

$level est un paramètre obligatoire, spécifiant le niveau de protocole auquel le l'option fonctionne. , prenez généralement la constante SOL_SOCKET.

$optname est un paramètre obligatoire, spécifié Le nom de l’option à contrôler. $optval Est un paramètre obligatoire qui spécifie la valeur de l'option.

9. socket_last_error ([ ressource$socket ] )

Cette fonction est utilisée pour obtenir le dernier code d'erreur généré par n'importe quelle fonction socket, et la valeur de retour est un entier.

10. >$errno )Cette fonction est utilisée pour obtenir la description de l'erreur représentée par le code d'erreur, et la valeur de retour est une chaîne . En tant que programmeur non bas niveau, il est très difficile de comprendre en profondeur le mécanisme d'implémentation interne du socket. Il nous suffit de comprendre que le socket est un ensemble de fonctions encapsulées par le système d'exploitation pour implémenter la communication de processus. . Il va créer et il suffit d'appeler. Les caractéristiques du langage et le positionnement de PHP déterminent qu'il ne convient qu'aux clients socket, mais pas aux serveurs socket. Étant donné que le socket est principalement orienté vers la couche inférieure et le développement de services réseau, le côté serveur est généralement implémenté dans des langages tels que C ou Java. Cela peut mieux faire fonctionner la couche inférieure et résoudre les problèmes rencontrés dans le développement de services réseau. (comme la concurrence, le blocage, etc.) Il existe également des solutions matures et complètes, mais PHP n'est évidemment pas adapté à ce scénario d'application. En fait, PHP exploite la base de données MySQL via des sockets. C'est précisément parce que les sockets protègent le protocole sous-jacent, simplifiant ainsi l'interconnexion entre les services réseau. En plus des sockets implémentés dans les langages traditionnels côté serveur, avec la popularité du HTML5, les WebSockets implémentés dans les clients de navigateur émergent également progressivement. FlashSocket est également une bonne solution.

Pour faire fonctionner le socket sur le client, vous pouvez utiliser des fonctions telles que fsockopen, socket_create ou stream_socket_client si c'est le cas. PHP5, il est recommandé d'utiliser stream_socket_client.

Exemple d'application interactive Socket : utilisez socket pour soumettre un formulaire

Créez un nouveau fichier test.php sur

http : // demo.com/index.php?id=1 Soumettez les données du formulaire, le code est le suivant

[php] view plain copy
<?php  
$data = array(&#39;comment&#39;=>&#39;this is a robot comment&#39;);  
$data = http_build_query($data);  
$out = "POST http://demo.com/index.php?id=1 HTTP/1.1\r\n";  // 通过POST方式发送数据  
$out .= "Host: demo.com\r\n";  
$out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";  
$out .= "Content-length: ".strlen($data)."\r\n";  
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n";  
$out .= "Connection: close"."\r\n"."\r\n";    // 注意:此处有两个 \r\n
$out .= $data."\r\n";   // 正文数据
$fp = fsockopen("demo.com", 80, $errno, $errstr, 30);  // 创建socket客户端连接
// $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30);  推荐这种写法
fwrite($fp, $out);    // 向服务器发送数据
while (!feof($fp)) {  
    echo fgets($fp, 1280);    // 读取服务器响应的数据
}  
fclose($fp);  // 关闭socket连接
?>
Copier après la connexion

Les points suivants sont à noter :

  • fsockopen的第一个参数,也可以使用IP地址,不要带 http:// 字符串,除非使用SSL等

  • 请求头(headers)不一定要带上所有的头域,一般只需带上几个核心的header即可

  • 在最后一个header处,即 Connection 后有两个换行

  • 注意编码问题

如果是PHP5,建议使用 stream_socket_client 代替 fsockopen,也就是将下面的代码:

$fp = fsockopen("demo.com", 80, $errno, $errstr, 30);
Copier après la connexion

改为:

$fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30);
Copier après la connexion

在PHP中,99.9%的socket应用属于流套接字的范畴,由于数据包套接字和原始套接字涉及比较底层的协议知识,这里就不作深究,有兴趣的朋友可自行学习。

相关推荐:

PHP中PDO事务处理操作示例


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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

See all articles