Maison >développement back-end >tutoriel php >Explication détaillée des exemples d'utilisation de socket en php

Explication détaillée des exemples d'utilisation de socket en php

怪我咯
怪我咯original
2017-07-13 09:20:483886parcourir

La signification anglaise originale de Socket est « trou » ou « socket ». En tant que mécanisme de communication de processus de BSD UNIX, c'est ce dernier sens qui est pris. Également communément appelé « socket », il est utilisé pour décrire une adresse IP et un port. Il s'agit d'un handle vers une chaîne de communication et peut être utilisé pour mettre en œuvre la communication entre différentes machines virtuelles ou différents ordinateurs. Les hôtes sur Internet exécutent généralement plusieurs logiciels de services et fournissent plusieurs services en même temps. Chaque service ouvre un Socket et est lié à un port. Différents ports correspondent à différents services. Socket est tout comme sa signification originale en anglais, comme une prise multi-trous. Un hôte est comme une pièce remplie de diverses prises. Chaque prise a un numéro. Certaines prises fournissent une alimentation CA de 220 volts, d'autres une alimentation CA de 110 volts et d'autres encore des programmes de télévision par câble. Le logiciel client branche les fiches dans des prises portant des numéros différents pour obtenir différents services. Cet article présente principalement l'utilisation de socket en PHP et détaille les étapes complètes de la communication par socket en PHP. Il est très précieux pour référence. Les amis dans le besoin peuvent s'y référer. L'utilisation spécifique est la suivante : .

1. Ouvrez le socket

phpinfo();

2. Comment écrire le code côté serveur

Le code est le suivant :

<?php
error_reporting(E_ALL);
set_time_limit(0);
//ob_implicit_flush();
$address = &#39;127.0.0.1&#39;;
$port = 10005;
//创建端口
if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
 echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n";
}
//绑定
if (socket_bind($sock, $address, $port) === false) {
 echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
}
//监听
if (socket_listen($sock, 5) === false) {
 echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
}
do {
 //得到一个链接
 if (($msgsock = socket_accept($sock)) === false) {
  echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";
  break;
 }
 //welcome  发送到客户端
 $msg = "<font color=&#39;red&#39;>server send:welcome</font><br/>";
 socket_write($msgsock, $msg, strlen($msg));
 echo &#39;read client message\n&#39;;
 $buf = socket_read($msgsock, 8192);
 $talkback = "received message:$buf\n";
 echo $talkback;
 if (false === socket_write($msgsock, $talkback, strlen($talkback))) {
  echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n";
 } else {
  echo &#39;send success&#39;;
 }
 socket_close($msgsock);
} while(true);
//关闭socket
socket_close($sock);
?>

Le serveur doit être exécuté dans mode cli, il est possible d'exécuter en mode cli Le fichier php.ini est chargé différemment

peut être affiché comme suit :

À ce moment. , il y a un fichier tem.text dans le répertoire zhoxh. Vérifiez le chemin du fichier de configuration (php.ini) => C:WINDOWS . Ce n'est pas mon fichier php.ini, ce qui signifie que le fichier php.ini appelé est erroné. A ce moment, nous devons spécifier la commande du fichier php.ini comme suit

Notez que mon php peut être directement exécuté avec les variables d'environnement configurées.

3. Client

Le code est le suivant :

<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>\n";
$service_port = 10005;
$address = &#39;127.0.0.1&#39;;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
 echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
 echo "OK. \n";
}
echo "Attempting to connect to &#39;$address&#39; on port &#39;$service_port&#39;...";
$result = socket_connect($socket, $address, $service_port);
if($result === false) {
 echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
 echo "OK \n";
}
$in = "HEAD / http/1.1\r\n";
$in .= "HOST: localhost \r\n";
$in .= "Connection: close\r\n\r\n";
$out = "";
echo "sending http head request ...";
socket_write($socket, $in, strlen($in));
echo  "OK\n";
echo "Reading response:\n\n";
while ($out = socket_read($socket, 8192)) {
 echo $out;
}
echo "closeing socket..";
socket_close($socket);
echo "ok .\n\n";

Le résultat de l'exécution est le suivant suit :
serveur :

client :

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:
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