Maison > développement back-end > tutoriel php > Comment implémenter une communication simple par socket php

Comment implémenter une communication simple par socket php

伊谢尔伦
Libérer: 2023-03-07 20:32:01
original
23277 Les gens l'ont consulté

Comment implémenter une communication simple par socket php

socket, également communément appelé « socket », est utilisé pour décrire une adresse IP et un port, et est un handle vers un chaîne de communication. Les applications envoient généralement des requêtes au réseau ou répondent aux requêtes du réseau via des « sockets ». Socket n'est ni un programme ni un protocole. C'est juste un ensemble d'API abstraites pour la couche de communication fournie par le système d'exploitation. Le chapitre précédent a présenté quelques fonctions courantes et importantes du socket php , qui seront utilisées dans la communication par socket.

La communication nécessite un serveur et un client :

Serveur : Utilisez php pour initialiser le socket, puis associez un port pour surveiller le port. Appelez accept pour bloquer et attendez que le client se connecte.

Client : Le client initialise un socket puis se connecte au serveur Si la connexion réussit, la connexion entre le client et le serveur est établie. Le client envoie une demande de données, le serveur reçoit la demande et traite la demande, puis envoie les données de réponse au client, le client lit les données, puis ferme la connexion et l'interaction se termine.

Client-serveur sont des applications qui peuvent interagir entre elles. L'interaction entre le client et le serveur nécessite une connexion. La programmation socket est chargée d’établir des connexions interactives entre les applications.

Processus de connexion au socket

En fonction de la manière dont la connexion est initiée et de la cible à laquelle le socket local est connecté, le processus de connexion entre les sockets peut être divisé en trois étapes : Surveillance du serveur, demande client, confirmation de connexion.

(1) Surveillance du serveur : le socket côté serveur ne localise pas le socket client spécifique, mais est en état d'attente de connexion et surveille l'état du réseau en temps réel.

(2) Requête client : fait référence à une demande de connexion faite par le socket du client, et la cible à connecter est le socket du serveur. Pour ce faire, le socket du client doit d'abord décrire le socket du serveur auquel il souhaite se connecter, indiquer l'adresse et le numéro de port du socket côté serveur, puis faire une demande de connexion au socket côté serveur.

(3) Confirmation de connexion : signifie que lorsque le socket côté serveur écoute ou reçoit la demande de connexion du socket client, il répond à la demande du socket client et établit un nouveau Thread, envoie la description de le socket côté serveur au client. Une fois que le client confirme cette description, la connexion est établie. Le socket côté serveur reste à l’état d’écoute et continue de recevoir des demandes de connexion d’autres sockets clients.

Le principe du socket peut se référer à l'organigramme ci-dessous :

Comment implémenter une communication simple par socket php

Ce qui suit est une implémentation simple de la communication socket via un exemple de code serveur-client L'ensemble du processus

1. Son code serveur :

<?php
set_time_limit(0); //限制执行时间  0为不限制
$ip = &#39;127.0.0.1&#39;;
$port = 8001;//端口
/**
socket通信整个过程 
socket_create  //创建一个套接字
socket_bind  //给套接字绑定 ip 和端口
socket_listen //监听套接字上的连接
socket_accept //接受一个socket连接
socket_read //接收客户端 发送的数据
socket_write //将数据写到 socket 缓存 向客户端发送
socket_close   //关闭套接字资源
*/ 
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {
        
        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));
        
        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);
        
        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;
        
        if(++$count >= 5){
            break;
        };
        
    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>
Copier après la connexion

Exécutez le fichier php, Après exécution, le résultat ne doit pas être visible, vous pouvez utilisez netstat -ntlp Vérifiez si le port 8001 est occupé. Voir photo ci-dessous.

Comment implémenter une communication simple par socket php

2. Son code client :

<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "socket通信客户端\n";
$port = 8001;//端口
$ip = "127.0.0.1";//ip
/**
socket连接整个过程
 socket_create //建立一个socket 连接
 socket_connect // 开始一个socket连接  连接服务端
 socket_write //将数据写入缓存   向服务端发送
 socket_read// 读取服务端的结果
 socket_close // 关闭套接字资源
  */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "OK.\n";
}
echo "试图连接 &#39;$ip&#39; 端口 &#39;$port&#39;...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
    echo "连接OK\n";
}
$in = "Ho\r\nfirst blood\r\n";
$out = &#39;&#39;;
if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "发送到服务器信息成功!\n";
    echo "发送的内容为:<font color=&#39;red&#39;>$in</font> <br>";
}
while($out = socket_read($socket, 8192)) {
    echo "接收服务器回传信息成功!\n";
    echo "接受的内容为:",$out;
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
?>
Copier après la connexion

Regardez le résultat de la fenêtre du serveur :

Comment implémenter une communication simple par socket php

Remarque : Les caractéristiques du langage PHP déterminent qu'à cet égard, php ne convient qu'au client, pas au serveur.

【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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal