Qu'est-ce que Socket ?
Socket est une couche d'abstraction logicielle intermédiaire pour la communication entre la couche application et la suite de protocoles TCP/IP. En mode conception, Socket est en fait un mode façade, qui cache la famille complexe de protocoles TCP/IP derrière l'interface Socket. Pour les utilisateurs, un ensemble d'interfaces simples permet à Socket d'organiser les données pour répondre aux exigences spécifiées. Il est rare de voir de nombreuses personnes utiliser le module socket de PHP pour faire certaines choses. Probablement tout le monde le place dans le cadre des langages de script, mais en fait, le module socket de PHP peut faire beaucoup de choses, y compris faire ftplist , soumission de post http. , soumission SMTP, package de groupe et interaction de messages spéciaux (tels que le protocole smpp), requête whois. Ce sont des requêtes relativement courantes. Surtout, ce que la bibliothèque d'extensions de socket de PHP peut faire n'est pas bien pire que C.
Bases de Socket
php utilise la bibliothèque de sockets de Berkley pour créer ses connexions. Vous pouvez savoir que le socket n’est qu’une structure de données. Utilisez cette structure de données de socket pour démarrer une session entre le client et le serveur. Ce 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. A ce moment, le serveur accepte la demande de connexion du client puis effectue un cycle. Le client peut désormais envoyer des informations au serveur, et le serveur peut envoyer des informations au client.
Pour générer un Socket, trois variables sont requises : un protocole, un type de socket et un type de protocole public . Vous avez le choix entre trois protocoles lors de la génération d'un socket. Continuez à lire ci-dessous pour obtenir le contenu détaillé du protocole. Définir un type de protocole public est un élément essentiel pour la connexion. Jetons un coup d'œil à ces types de protocoles courants.
1. Accord
名字/常量 | 描述 |
AF_INET | 这是大多数用来产生socket的协议,使用TCP或UDP来传输,用在IPv4的地址 |
AF_INET6 | 与上面类似,不过是来用在IPv6的地址 |
AF_UNIX | 本地协议,使用在Unix和Linux系统上,它很少使用,一般都是当客户端和服务器在同一台及其上的时候使用 |
2. Type de prise
名字/常量 | 描述 |
SOCK_STREAM | 这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。 |
SOCK_DGRAM | 这个协议是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。 |
SOCK_SEQPACKET | 这个协议是双线路的、可靠的连接,发送固定长度的数据包进行传输。必须把这个包完整的接受才能进行读取。 |
SOCK_RAW | 这个socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。(ping、traceroute使用该协议) |
SOCK_RDM | 这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据链路层使用,不保证数据包的顺序 |
3. Protocole public
名字/常量 | 描述 |
ICMP | 互联网控制消息协议,主要使用在网关和主机上,用来检查网络状况和报告错误信息 |
UDP | 用户数据报文协议,它是一个无连接,不可靠的传输协议 |
TCP | 传输控制协议,这是一个使用最多的可靠的公共协议,它能保证数据包能够到达接受者那儿,如果在传输过程中发生错误,那么它将重新发送出错数据包。 |
Maintenant que nous connaissons les trois éléments qui génèrent un socket, nous pouvons utiliser la fonction socket_create() en php pour générer un socket. La fonction socket_create() nécessite trois paramètres : un protocole, un type de socket et un protocole public. La fonction socket_create() renvoie un type de ressource contenant le socket si elle s'exécute correctement. En cas d'échec, elle renvoie false.
Resourece socket_create(int protocol, int socketType, int commonProtocol);
php fournit plusieurs fonctions pour manipuler les sockets, qui peuvent lier le socket à une IP, surveiller la communication d'un socket et accepter un socket ; regardons maintenant un exemple pour comprendre le ; function Comment générer, recevoir et écouter une socket.
Le code est le suivant :
<?php $commonProtocol = getprotobyname("tcp"); $socket = socket_create(AF_INET, SOCK_STREAM,$commonProtocol); socket_bind($socket,'localhost',1337); socket_listen($socket); ?>
Remarque : L'exemple ci-dessus génère votre propre serveur.
La première ligne de l'exemple utilise le nom du protocole public pour obtenir un type de protocole. Le protocole public TCP est utilisé ici. Si vous souhaitez utiliser le protocole UDP ou ICMP, vous devez alors modifier les paramètres de la fonction getprotobyname() en "udp" ou "icmp". Une alternative consiste à ne pas utiliser la fonction getprotobyname() mais à spécifier SOL_TCP ou SOL_UDP dans la fonction socket_create().
La deuxième ligne de l'exemple génère un socket et renvoie une instance de la ressource socket. Une fois que vous disposez d’une instance de la ressource socket, vous devez lier le socket à une adresse IP et un port.
La troisième ligne ici lie le socket à l'ordinateur local (127.0.0.1) et lie le socket à votre port 1337. Ensuite, vous devez écouter toutes les connexions socket entrantes. Après la quatrième ligne, vous devez comprendre toutes les fonctions des sockets et leur utilisation. La fonction socket sera expliquée en détail dans les chapitres suivants.
【Tutoriels associés recommandés】
1. "php.cn Dugu Jiujian (4) - Tutoriel vidéo PHP "
2. ensemble de tutoriels sur la programmation PHP de l'entrée à la maîtrise
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!