Maison > développement back-end > tutoriel php > Comment connecter une socket socket en PHP

Comment connecter une socket socket en PHP

little bottle
Libérer: 2023-04-06 08:14:01
original
2584 Les gens l'ont consulté

Socket est également communément appelé « socket », qui est utilisé pour décrire l'adresse IP et le port et constitue le descripteur d'une chaîne de communication. Les applications envoient généralement des requêtes au serveur ou répondent aux requêtes du réseau via des « sockets ». Cet article parle principalement du processus de connexion entre les caractères socket en PHP, qui a une certaine valeur de référence. Les amis intéressés peuvent en apprendre davantage.

En fonction de la manière dont le lien est démarré et de la cible à laquelle la socket locale doit être connectée, le processus de connexion entre les sockets peut être divisé en trois étapes :

1. Surveillance du serveur : le socket côté serveur ne localise pas le socket client spécifique, mais est en 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 cela, le socket du client doit d'abord se familiariser avec le socket du serveur auquel il souhaite se connecter, indiquer l'adresse et le numéro de port du socket du serveur, puis faire une demande de connexion tout comme le socket du serveur.

3. Confirmation de connexion : 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, crée un nouveau thread et. envoyer la description du 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 liaison provenant d’autres sockets clients.

1. Environnement de test :

IP du serveur : xxx.xxx.xxx.1

IP client : xxx.xxx.xxx.2

2. Processus de test :

Le serveur client sera sur cette machine (xxx .xxx.xxx.1) Envoyer les données au serveur socket du serveur (xxx.xxx.xxx.2) via le socket Après avoir reçu les données envoyées par le client, le serveur renvoie certaines données au client .

3. Contenu du fichier serveur :  

<?php
  //获取tcp协议号吗.
  $tcp = getprotobyname("tcp");
  //建立server端socket , 创建并返回一个套接字,也称做一个通讯节点.一个典型的网络连接由2个套接字构成 , 一个运行在客户端 , 另一个运行在服务器端.
  $socket = socket_create(AF_INFT , SOCK_STREAM , $tcp);
  //绑定要监听的ip和端口 , 这里绑定的ip一定要写局域网ip , 写成127.0.0.1客户端将无法与服务器端建议连接.
  socket_bind($socket , &#39;xxx.xxx.xxx.1&#39; , 10008);
  //监听端口
  socket_listen($socket);
  //初始化一个数据 , 和客户端通信
  $buffer = "connect";
  while(true){
    //接受客户端请求过来的yigesocket连接
    $connection = socket-accept($scoket);
    if(!connection){
      echo "connect faild";
    } else {
    echo "Socket connected \n";
    //向客户传递一个信息数据
   if($buffer != ""){
    echo "send data to client\n";
    socket_write($connection , $buffer , "\n");
    echo "Wrote to socket\n";    
} else {
    echo "no data in the buffer\n";
}   
  //从客户端获取得的数据
  while($data = $socket_read($connection , 1024 , PHP_NORMAL_READ)){
  printf("Buffer:".$data.&#39;\n&#39;);
  //取得信息给客户端一个反馈 ,Thank you client , you data is Received success发给客户端的回应信息.
  socket-wirte($coennection , "Thank you client , you data is Received success \n");
}
}
//关闭sockket
socket_close($connection);
printf("Closed the socket\n");
  
  }
?>
Copier après la connexion

4. Contenu du fichier client :

<?php
  //建立客户端的socket连接
  $socket = se);
  //连接服务器端socket
  $connection = socket_connect($socket , &#39;xxx.xxx.xxx.1&#39; , 10008);
  //要求发送到服务端的信息.
  $send_data = "This data will Send to server!";
  //客户端去连接服务端并接受服务端返回的数据 , 如果返回的数据保护not connect就提示不能连接.
  while($buffer = @socket_read($socket , 1024,PHP_NORMAL_READ)){
    if(preg_match("/not connect/" , $buffer)){
    echo "don&#39;t connect\n";
    break;
  } else {
  //服务端传来的信息
  echo "Buffer Data: ".$buffer .&#39;\n&#39;;
  echo "Writing to Socket\n";
  //将客户的信息写道通道中 , 传给服务器端
  if(!socket_write($socket , "$send_data\n")){
     echo "Write failed\n";
  }
  //服务器端收到信息后 , 客户端接受服务端传给客户端的回应信息.
  while($buffer = socket_read($socket , 1024 , PHP_NORMAL_READ)){
    echo "send to server: $send-data\n response from server was:".$buffer."\n";
  }
  }
  }
?>
Copier après la connexion

5. Démarrez le processus sur le service socket du serveur.

#/usr/local/php/bin/php -a/home/server.php
Interactive mode enable 互动模式启动
Copier après la connexion

6. Une fois le serveur démarré, vérifiez le processus démarré et le port

#netstat -tnlp |grep 10008
tcp   0  0 192.168.13:10008  0.0.0.0:*  LISTEN
28892/php
Copier après la connexion

7. Effectuer la transmission sur le client (192.168.1.2)

#/usr/local/php/bin/php -a client.php
Interactive mode enabled
Copier après la connexion

8. Répondre Accédez au serveur pour afficher les informations reçues.

#/usr/local/php/bin/php -a /home/server.php
Interactive mode enabled
 
Socket connected
send data client
Wrote to socket
Buffer:This data will Send to server!
Copier après la connexion

Tutoriels associés : Tutoriel vidéo 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!

É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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal