Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Anwendungsbeispiele von Socket in PHP

Detaillierte Erläuterung der Anwendungsbeispiele von Socket in PHP

怪我咯
怪我咯Original
2017-07-13 09:20:483836Durchsuche

Die ursprüngliche englische Bedeutung von Socket ist „Loch“ oder „Buchse“. Als Prozesskommunikationsmechanismus von BSD UNIX wird die letztere Bedeutung angenommen. Auch „Socket“ genannt, wird es zur Beschreibung einer IP-Adresse und eines Ports verwendet. Es ist ein Handle für eine Kommunikationskette und kann zur Implementierung der Kommunikation zwischen verschiedenen virtuellen Maschinen oder verschiedenen Computern verwendet werden. Hosts im Internet führen im Allgemeinen mehrere Dienstsoftware aus und stellen mehrere Dienste gleichzeitig bereit. Jeder Dienst öffnet einen Socket und ist an einen Port gebunden. Verschiedene Ports entsprechen unterschiedlichen Diensten. Socket ist genau wie seine ursprüngliche Bedeutung im Englischen wie eine Mehrlochsteckdose. Ein Host ist wie ein Raum voller verschiedener Steckdosen. Einige Steckdosen liefern 220-Volt-Wechselstrom, andere bieten Kabelfernsehprogramme. Die Client-Software steckt die Stecker in Steckdosen mit unterschiedlichen Nummern, um unterschiedliche Dienste zu erhalten. Dieser Artikel stellt hauptsächlich die Verwendung von Sockets in PHP vor und beschreibt die vollständigen Schritte der Socket-Kommunikation in PHP. Er ist sehr wertvoll als Referenz. Die spezifische Verwendung ist wie folgt

1. Öffnen Sie den Socket

phpinfo(); Überprüfen Sie, ob die Socket-Erweiterung aktiviert ist, andernfalls aktivieren Sie sie in php.ini.

2. So schreiben Sie den serverseitigen Code

Der Code lautet wie folgt:

<?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);
?>
Der Server muss ausgeführt werden Im CLI-Modus kann die php.ini-Datei anders geladen werden.

kann wie folgt ausgegeben werden:

Zu diesem Zeitpunkt , es gibt eine tem.text-Datei im zhoxh-Verzeichnis. Überprüfen Sie den Pfad der Konfigurationsdatei (php.ini) => C:WINDOWS. Es ist nicht meine php.ini-Datei, was bedeutet, dass die aufgerufene php.ini-Datei falsch ist. Zu diesem Zeitpunkt müssen wir den Dateibefehl php.ini wie folgt angeben:

Beachten Sie, dass mein PHP direkt mit konfigurierten Umgebungsvariablen ausgeführt werden kann.

3. Client

Der Code lautet wie folgt:

<?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";
Das Ausführungsergebnis ist wie folgt folgt:

Server:

Client:

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Anwendungsbeispiele von Socket in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn